我检查了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; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)