用LINQ保序

我在有序数组上使用LINQ to Objects指令。
我不应该执行哪些操作来确保数组的顺序没有更改

我检查了System.Linq.Enumerable的方法,丢弃了任何返回非IEnumerable结果的方法。我检查了每个人的评论,以确定结果的顺序与来源的顺序有何不同

绝对保持秩序。可以按索引将源元素映射到结果元素

  • 可计算
  • 铸造
  • 海螺
  • 挑选
  • 托雷
  • 托利斯特

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

  • 明显的
  • 除了
  • 相交
  • 类型
  • 前置(在.net 4.7.1中新增)
  • 跳过
  • 滑雪爱好者
  • 接受
  • 花时间
  • 在哪里
  • Zip(在.NET4中新增)

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

  • 托迪科
  • 托卢库普

显式重新定义顺序-使用这些更改结果的顺序

  • 订货人
  • OrderByDescending
  • 逆转
  • 然后
  • 然后下降

根据一些规则重新定义顺序

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

编辑:基于这个实现,我已经转移到保持顺序

私有静态IEnumerable<t来源>识别器<t来源>
(IEnumerable<TSource>源、IEqualityComparer<TSource>比较器)
{
Set<TSource>Set=新Set<TSource>(比较器);
foreach(源中的TSource元素)
if(set.Add(element))收益返回元素;
}

发表评论