Ix.NET
Ix.NET库是Reactive Extension的一部分。这个库在System.Interactive程序集内提供了一些针对LINQ的扩展。使用Visual Studio的NuGet包管理器搜索Ix-Main可以下载并管理这个库。
下载之后工程会自动添加对System.Interactive程序集的引用,并且Ix.NET中对于LINQ的扩展均位于System.Linq名字空间内,因此不需要额外的引用其他名字空间就可以使用这些扩展了。
下面让我们来看看Ix.NET库中针对LINQ的扩展。
ForEach方法
说明:针对序列元素的ForEach方法。
Generate方法
说明:通过模拟循环来生成序列。
// 生成斐波那契数列中前10个数:[0,1,1,2,3,5,8,13,21,34]
EnumerableEx.Generate(
new { v1 = 0, v2 = 1 }, // initial
_ => true, // condition
a => new { v1 = a.v2, v2 = a.v1 + a.v2 }, // iterate
a => a.v1 // resultSelector
)
.Take(10)
.ForEach(Console.WriteLine);
MaxBy方法,MinBy方法,Distinct方法
说明:通过比较键值来返回具有最大(最小,不同)键值的元素序列。
// 返回绝对值最大的元素序列[4,-4]
new[] { 1, -2, 3, 4, -4 }.MaxBy(Math.Abs);
// 返回除以4余数最小的元素序列[1,5]
new[] { 1, 2, 3, 5 }.MinBy(x => x % 4);
// 返回除以5余数首次出现时的元素序列[0,1,2,3,4]
Enumerable.Range(0, 10).Distinct(x => x % 5);
IgnoreElements方法
说明:返回源序列所对应的空序列。
Return方法
说明:返回由单个元素所组成的序列。
IsEmpty方法
说明:判断序列是否为空。
// 序列[1,2,3]所对应的空序列为空,返回True
new[] { 1, 2, 3 }.IgnoreElements().IsEmpty();
// 序列[3]不为空,返回False
EnumerableEx.Return(3).IsEmpty();
DistinctUntilChanged方法
说明:比较相邻元素的键值,返回去除重复元素后的序列。
// 返回序列[1,2,3,4,3,4]
new[] { 1, 1, 2, 2, 2, 3, 4, 3, 4 }.DistinctUntilChanged();
Scan方法
说明:应用聚合函数,给出所有的中间结果组成的序列。
// 返回序列[1,3,6,10]
new[] { 1, 2, 3, 4 }.Scan((acc, x) => acc + x)