使用 LINQ 保留顺序

2024-01-13

我在有序数组上使用 LINQ to Objects 指令。 为了确保数组的顺序不改变,我不应该执行哪些操作?


我检查了以下方法System.Linq.Enumerable http://msdn.microsoft.com/en-us/library/system.linq.enumerable_methods.aspx,丢弃任何返回非 IEnumerable 结果的内容。我检查了每个的注释,以确定结果的顺序与源的顺序有何不同。

绝对保留秩序。您可以通过索引将源元素映射到结果元素

  • 作为可枚举的
  • Cast
  • Concat
  • Select
  • ToArray
  • ToList

保留秩序。元素被过滤或添加,但不会重新排序。

  • Distinct
  • Except
  • 相交
  • OfType
  • 前置(.net 4.7.1 中的新增功能)
  • Skip
  • 跳过时
  • Take
  • 稍事休息
  • Where
  • Zip(.net 4 中的新增功能)

破坏秩序 - 我们不知道预期结果是什么顺序。

  • 到字典
  • ToLookup

显式重新定义顺序 - 使用它们来更改结果的顺序

  • OrderBy
  • 按降序排列
  • Reverse
  • ThenBy
  • 然后按降序

根据一些规则重新定义Order。

  • GroupBy - IGrouping 对象的生成顺序基于源中生成每个 IGrouping 第一个键的元素的顺序。分组中的元素按照它们在源中出现的顺序生成。
  • GroupJoin - GroupJoin 保留外部元素的顺序,并且对于外部的每个元素,保留内部匹配元素的顺序。
  • Join - 保留外部元素的顺序,并且对于每个元素,保留内部匹配元素的顺序。
  • SelectMany - 对于源的每个元素,调用选择器并返回值序列。
  • Union - 枚举此方法返回的对象时,Union 按该顺序枚举第一个和第二个,并生成尚未生成的每个元素。

编辑:我已将 Distinct 移至 Preserving order 基于此执行 https://github.com/dotnet/corefx/blob/master/src/System.Linq/src/System/Linq/Enumerable.cs.

    private static IEnumerable<TSource> DistinctIterator<TSource>
      (IEnumerable<TSource> source, IEqualityComparer<TSource> comparer)
    {
        Set<TSource> set = new Set<TSource>(comparer);
        foreach (TSource element in source)
            if (set.Add(element)) yield return element;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 LINQ 保留顺序 的相关文章

  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • 索引布尔列与日期时间列的查询性能

    如果索引设置为datetime键入列 而不是boolean输入列 并且查询是在该列上完成的 在我当前的设计中 我有两列 is active小整数 1 indexed deleted at约会时间 查询是SELECT FROM table W
  • 选择哪个 log4j 门面?

    本质上 我正在寻找与 log4j 具有相同行为 配置 日志记录级别的东西 但缺少一些功能 例如格式化日志记录 请参阅here https stackoverflow com questions 920458 and here https s
  • 如何在 Xcode 中使用 cocos2d?

    我下载了最新版本的 cocos2d 但我对如何在当前项目中使用它感到困惑 谁能告诉我如何在 xcode 中使用它 我正在设计一个二维迷宫 我必须进口一些东西吗 任何形式的帮助将不胜感激 是的 您需要将cocos2d文件拖到您的项目中 然后它
  • boost.org 的 Spirit 解析器生成器框架有哪些缺点?

    在几个问题中我看到了以下建议Spirit http www boost org doc libs 1 37 0 libs spirit classic index html解析器生成器框架来自boost org http www boost
  • ClassCastException:android.app.Application

    导致错误的类如下 package com extrasmart import android app Activity import android os Bundle import android view View import and
  • 真正可复制的 Docker 容器?

    有一种安全趋势叫做可重复的构建 https en wikipedia org wiki Reproducible builds 其目标是有一种方法来创建输出二进制文件的位精确副本 以便用户可以验证在互联网上找到的版本是否值得信赖 Docke
  • 如何测试 ColdFusion 结构中是否存在变量?

    我想测试一下
  • Microsoft Graph 访问令牌刷新

    我正在编写一个应用程序 该应用程序使用 OAuth 2 0 客户端凭据授予流程 来获取用于调用 Microsoft Graph API 的访问令牌 应用程序以自身身份进行身份验证 而不是代表登录用户进行身份验证 我的代码基于此来自微软的例子
  • 如何在 pdb 中等待协程

    我正在使用异步库 asyncpg https github com MagicStack asyncpg 并且我想调试一些异步调用来查询数据库 我放置了一个 pdb 断点并想尝试一些查询 pdb await asyncpg fetch se
  • 提交表单时将输入文本转换为小写

    我有一个表单 其中有一个文本字段配有提交按钮 单击提交按钮后 它会从第一个 php 页面重定向到第二个 php 页面 索引 php
  • 使用现有的持久卷声明部署 bitnami/mysql helm 图表

    我正在尝试部署比特纳米 mysql https github com bitnami charts tree master bitnami mysql我里面的图表minikube https minikube sigs k8s io doc
  • 服务器启动时执行的内容与请求传入时执行的内容是什么?

    我一直在 Django 中进行一些类黑客攻击 我从 settings py 中调用我的更改 因为我认为它会先于其他任何事情运行 然而 我刚刚遇到了一种情况 这对我不起作用 那么 还有其他地方吗aftersettings py 我可以保证服务
  • 将 TrueType 字体加载到 OpenCV

    我们可以加载自定义 TrueType 字体并将其与cv2 putText功能 font cv2 FONT HERSHEY SIMPLEX cv2 putText img OpenCV 10 500 font 4 255 255 255 2
  • 无效方差:类型参数“T”在“xxx.IItem.GetList()”上必须始终有效。 “T”是协变的[重复]

    这个问题在这里已经有答案了 为什么下面的代码会出现错误 无效方差 类型参数 T 必须始终有效 UserQuery IItem GetList T 是协变的 public interface IFoo public interface IBa
  • 如何使用java代码调用solr进行优化

    不在壳下 我想使用 Java 代码调用优化并在优化过程完成时收到通知 只需发出请求即可 solr update optimize true从任何可以访问 Solr 服务器的地方 任何东西 例如 curl http localhost 898
  • 如何像 MS Access 一样使用目录路径连接 MySQL 数据库文件(.sql)?

    抱歉 也许这是我第二次问这个问题 因为没有得到任何答案 这是我的代码 try File f new File Database sql if f exists Class forName com mysql jdbc Driver newI
  • 您如何思考并预测这样的线程问题的输出?

    我正在准备 SCJP 多线程一直是我最不稳定的领域 主要是因为我不知道如何查看多线程代码并逐步完成它 到目前为止 我的方法是用英语写下每个线程中可能发生的情况 并测试一些线程随机交叉的情况 这确实是一种偶然且耗时的方法 所以我想看看专业人士
  • 使用wpf应用程序读取条形码

    在我的一个 WPF 应用程序中 我需要能够使用 C 读取条形码值 我不知道该怎么做 任何帮助 将不胜感激 提前致谢 最好的方法是创建一个键盘钩子 下面是我在几个项目中使用过的一个类 你像这样使用它 var hook new Keyboard
  • Scala Slick 2.0.0 的构建错误

    我正在尝试建立scala slick但出现以下错误 adongre pnq adongre1 adongre1 external scala slick slick project gt sbt version sbt launcher v
  • 使用 LINQ 保留顺序

    我在有序数组上使用 LINQ to Objects 指令 为了确保数组的顺序不改变 我不应该执行哪些操作 我检查了以下方法System Linq Enumerable http msdn microsoft com en us librar