使用LINQ保留订单

使用LINQ保留订单,第1张

使用LINQ保留订单

我检查了System.Linq.Enumerable的方法,丢弃了所有返回非IEnumerable结果的方法。我检查了每个注释,以确定结果的顺序与源顺序之间的差异。

绝对保留订单。您可以按索引将源元素映射到结果元素

  • 无数
  • 康卡特
  • 选择
  • 数组
  • 到清单

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

  • 不同
  • 除了
  • 相交
  • 类型
  • 前置(.net 4.7.1中的新功能)
  • 跳跃
  • 跳过而
  • 采取
  • 哪里
  • 邮编(.net 4中的新功能)

销毁订单-我们不知道期望的订单顺序。

  • 到字典
  • 去查查看

明确地重新定义订单-使用这些来更改结果的顺序

  • 按订单
  • OrderByDescending
  • 逆转
  • 然后
  • 然后降序

根据一些规则重新定义订单。

  • GroupBy-根据产生每个IGrouping第一个键的源中元素的顺序,按顺序产生IGrouping对象。分组中的元素按它们在源中出现的顺序产生。
  • GroupJoin-GroupJoin保留外部元素的顺序,对于外部元素,从内部匹配元素的顺序。
  • 连接-保留外部元素的顺序,对于这些元素中的每个元素,保留内部匹配元素的顺序。
  • SelectMany-对于源的每个元素,都会调用选择器,并返回一个值序列。
  • 联合-枚举此方法返回的对象时,联合将按此顺序枚举第一和第二,并产生尚未产生的每个元素。

编辑:基于此实现,我已将Distinct移至Preserving
order 。

    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;    }


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5564549.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存