SelectMany
Rxの演算子がどのように機能するか教えてください。Linq のこの演算子についても詳しく知りません。
簡単な例を使ってこれを説明してください。また、Rx でこの演算子をどのような場合に使用するかについても説明してください。
SelectMany
Rxの演算子がどのように機能するか教えてください。Linq のこの演算子についても詳しく知りません。
簡単な例を使ってこれを説明してください。また、Rx でこの演算子をどのような場合に使用するかについても説明してください。
SelectMany は次のとおりです。
source.Select(selector).Merge();
つまり、Observable のストリームへのソース入力を選択し、次に各 Observable を結果のストリームにフラット化します。
SelectMany
投影と平坦化を1つのステップに結合します。次のような単一のリストにフラット化するために{ {1, 2}, {3, 4, 5}, { 6, 7 } }
使用できるようなリストがいくつかあるとします。SelectMany
{ 1, 2, 3, 4, 5, 6, 7}
SelectMany
Rxでは、複数のシーケンスを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つのオブザーバブルはすべてDownloadFile
1つにフラット化されるため、3つの値が到着するのを待って、すべてのダウンロードが完了したことを確認できます。
この短いビデオは、Rx の SelectMany (およびマーブル ダイアグラムのより高度な使用法) を理解するのに役立ちます: http://channel9.msdn.com/Blogs/J.Van.Gogh/Reactive-Extensions-API-in-depth -多数選択