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