9

请任何人告诉我SelectManyRx 中的操作员是如何工作的。我也不知道更多关于 Linq 中的这个运算符。

请借助一个简单的示例来解释这一点,以及在什么情况下我们将在 Rx 中使用此运算符。

4

3 回答 3

24

SelectMany 只是:

source.Select(selector).Merge();

换句话说,它将源输入选择为 Observable 流,然后将每个 Observable 展平为结果流。

于 2012-04-11T01:18:15.177 回答
23

SelectMany将投影和展平结合到一个步骤中。假设您有许多列表{ {1, 2}, {3, 4, 5}, { 6, 7 } },可以用来SelectMany将其展平为单个列表,例如:{ 1, 2, 3, 4, 5, 6, 7}

SelectMany在 Rx 中可以将多个序列展平为一个 observable(实际上有几个重载)。

举个实际的例子,假设你有一个函数DownloadFile(filename)给你一个 Observable,当文件完成下载时它会产生一个值。你现在可以写:

string[] files = { "http://.../1", "http://.../2", "http://.../3" };

files.ToObservable()
                 .SelectMany(file => DownloadFile(file))
                 .Take(3)
                 .Subscribe(c => Console.WriteLine("Got " + c) , ()=>  Console.WriteLine("Completed!"));

的所有 3 个 observableDownloadFile都被扁平化为一个,因此您可以等待 3 个值到达以查看所有下载已完成。

于 2012-04-09T12:22:57.157 回答
10

我发现这个简短的视频有助于理解 SelectMany for Rx(以及作为大理石图的更高级使用):http ://channel9.msdn.com/Blogs/J.Van.Gogh/Reactive-Extensions-API-in-depth -SelectMany

于 2012-04-11T22:22:35.773 回答