1. Select(类似Map)
- 作用:将可观察序列中的每个元素投影到一个新的形式。它对源序列的每个元素应用一个指定的转换函数,生成一个新的可观察序列,新序列中的元素是原序列元素经过转换后的结果。
- 实际场景应用:在处理数据集合时,经常需要将对象的某个属性提取出来,或者对对象进行一些简单的转换操作。例如,有一个包含用户信息的可观察序列,每个用户对象包含姓名和年龄,现在只需要获取所有用户的姓名。
- 代码示例:
using System;
using System.Reactive.Linq;
class Program
{
static void Main()
{
var users = new[]
{
new { Name = "Alice", Age = 30 },
new { Name = "Bob", Age = 25 },
new { Name = "Charlie", Age = 35 }
};
var names = users.ToObservable()
.Select(user => user.Name);
names.Subscribe(name => Console.WriteLine($"Name: {name}"));
}
}
2. Where(类似Filter)
- 作用:过滤可观察序列,仅允许满足指定条件的元素通过。它会对源序列中的每个元素应用一个谓词函数,只有当谓词函数返回
true
时,该元素才会被包含在输出的可观察序列中。
- 实际场景应用:在处理大量数据时,常常需要筛选出符合特定条件的数据。例如,从一个包含所有订单的可观察序列中,筛选出金额大于100的订单。
- 代码示例:
using System;
using System.Reactive.Linq;
class Program
{
static void Main()
{
var orders = new[]
{
new { OrderId = 1, Amount = 50 },
new { OrderId = 2, Amount = 150 },
new { OrderId = 3, Amount = 80 }
};
var largeOrders = orders.ToObservable()
.Where(order => order.Amount > 100);
largeOrders.Subscribe(order => Console.WriteLine($"OrderId: {order.OrderId}, Amount: {order.Amount}"));
}
}
3. Aggregate(类似Reduce)
- 作用:对可观察序列应用一个累加器函数,将序列中的元素累积成一个单一的值。累加器函数接受两个参数,第一个是累加的结果,第二个是序列中的下一个元素,每次迭代都返回新的累加结果。
- 实际场景应用:计算数据集合的总和、平均值等聚合值。例如,计算一个包含产品价格的可观察序列的总价格。
- 代码示例:
using System;
using System.Reactive.Linq;
class Program
{
static void Main()
{
var prices = new[] { 10.0, 20.0, 30.0 };
var totalPrice = prices.ToObservable()
.Aggregate((acc, price) => acc + price);
totalPrice.Subscribe(total => Console.WriteLine($"Total price: {total}"));
}
}