LINQ扩展库Ix.NET

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)

你可能感兴趣的:(LINQ扩展库Ix.NET)