.NET 6.0 —— System.Linq
https://www.zhihu.com/question/449756804
System.Linq — 可枚举支持Index
和Range
参数
该方法现在接受可枚举项末尾的索引,如下例所示。Enumerable.ElementAt
Enumerable.Range(1, 10).ElementAt(^2); // returns 9
添加了一个接受参数的重载。它简化了对可枚举序列的切片:Enumerable.TakeRange
source.Take(..3)
代替source.Take(3)
source.Take(3..)
代替source.Skip(3)
source.Take(2..7)
代替source.Take(7).Skip(2)
source.Take(^3..)
代替source.TakeLast(3)
source.Take(..^3)
代替source.SkipLast(3)
source.Take(^7..^3)
而不是.source.TakeLast(7).SkipLast(3)
感谢@dixin。
作者:醉书生
链接:https://www.zhihu.com/question/449756804/answer/2219422015
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
System.Linq —
System.Linq —
System.Linq —
System.Linq —
System.Linq的-
System.Linq —
链接:https://www.zhihu.com/question/449756804/answer/2219422015
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
System.Linq — TryGetNonEnumeratedCount
该TryGetNonEnumeratedCount
方法尝试在不强制枚举的情况下获取源可枚举的计数。这种方法在枚举之前预分配缓冲区很有用的情况下很有用,如下例所示。
List<T> buffer = source.TryGetNonEnumeratedCount(out int count) ? new List<T>(capacity: count) : new List<T>();
foreach (T item in source)
{
buffer.Add(item);
}
TryGetNonEnumeratedCount
检查实现ICollection
/或利用Linq 使用的一些内部优化的源。ICollection<T>
System.Linq — DistinctBy
/ UnionBy
/ IntersectBy
/ExceptBy
新的变体已添加到集合操作中,允许使用键选择器函数指定相等性,如下面的示例所示。
Enumerable.Range(1, 20).DistinctBy(x => x % 3); // {1, 2, 3}
var first = new (string Name, int Age)[] { ("Francis", 20), ("Lindsey", 30), ("Ashley", 40) };
var second = new (string Name, int Age)[] { ("Claire", 30), ("Pat", 30), ("Drew", 33) };
first.UnionBy(second, person => person.Age); // { ("Francis", 20), ("Lindsey", 30), ("Ashley", 40), ("Drew", 33) }
System.Linq — MaxBy
/MinBy
MaxBy
和MinBy
方法允许使用键选择器查找最大或最小元素,如下例所示。
var people = new (string Name, int Age)[] { ("Francis", 20), ("Lindsey", 30), ("Ashley", 40) };
people.MaxBy(person => person.Age); // ("Ashley", 40)
System.Linq — Chunk
Chunk
可用于将可枚举的源分块为固定大小的切片,如下例所示。
IEnumerable<int[]> chunks = Enumerable.Range(0, 10).Chunk(size: 3); // { {0,1,2}, {3,4,5}, {6,7,8}, {9} }
归功于罗伯特·安德森。
System.Linq的- FirstOrDefault
/ LastOrDefault
/SingleOrDefault
过载采取默认参数
现有FirstOrDefault
/ LastOrDefault
/SingleOrDefault
方法返回如果源枚举是空的。添加了新的重载,接受在这种情况下要返回的默认参数,如下面的示例所示。default(T)
Enumerable.Empty<int>().SingleOrDefault(-1); // returns -1
感谢@ Foxtrek64。
System.Linq —Zip
接受三个枚举的重载
该邮编方法现在支持组合三个枚举接口,你可以在下面的例子中看到。
var xs = Enumerable.Range(1, 10);
var ys = xs.Select(x => x.ToString());
var zs = xs.Select(x => x % 2 == 0);
foreach ((int x, string y, bool z) in Enumerable.Zip(xs,ys,zs))
{
}
感谢霍耀元。
作者:醉书生
链接:https://www.zhihu.com/question/449756804/answer/2219422015
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。