9

SelectManyRxの演算子がどのように機能するか教えてください。Linq のこの演算子についても詳しく知りません。

簡単な例を使ってこれを説明してください。また、Rx でこの演算子をどのような場合に使用するかについても説明してください。

4

3 に答える 3

24

SelectMany は次のとおりです。

source.Select(selector).Merge();

つまり、Observable のストリームへのソース入力を選択し、次に各 Observable を結果のストリームにフラット化します。

于 2012-04-11T01:18:15.177 に答える
23

SelectMany投影と平坦化を1つのステップに結合します。次のような単一のリストにフラット化するために{ {1, 2}, {3, 4, 5}, { 6, 7 } }使用できるようなリストがいくつかあるとします。SelectMany{ 1, 2, 3, 4, 5, 6, 7}

SelectManyRxでは、複数のシーケンスを1つのオブザーバブルにフラット化できます(実際にはいくつかのオーバーロードがあります)。

実際の例として、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つのオブザーバブルはすべてDownloadFile1つにフラット化されるため、3つの値が到着するのを待って、すべてのダウンロードが完了したことを確認できます。

于 2012-04-09T12:22:57.157 に答える
10

この短いビデオは、Rx の SelectMany (およびマーブル ダイアグラムのより高度な使用法) を理解するのに役立ちます: http://channel9.msdn.com/Blogs/J.Van.Gogh/Reactive-Extensions-API-in-depth -多数選択

于 2012-04-11T22:22:35.773 に答える