RxのSelectMany
オペレータがどのように機能するか教えてください。私はLinqのこの演算子についてもっと知りません。複数選択Rx
簡単な例の助けを借りて、またRxでこの演算子をどのように使用するかを説明してください。
RxのSelectMany
オペレータがどのように機能するか教えてください。私はLinqのこの演算子についてもっと知りません。複数選択Rx
簡単な例の助けを借りて、またRxでこの演算子をどのように使用するかを説明してください。
SelectMany
は、投影と平坦化を1つのステップにまとめました。観察可能な1(いくつかのオーバーロードが実際にあります)の中に複数のシーケンスを平らにすることができます受信に{ 1, 2, 3, 4, 5, 6, 7}
SelectMany
:あなたはあなたのような1つのリストにそれを平らにするSelectMany
を使用することができます{ {1, 2}, {3, 4, 5}, { 6, 7 } }
のようなリストの数を持っていると仮定します。
具体的な例として、ファイルがダウンロード完了したときに値を生成するObservableを提供する関数DownloadFile(filename)
があるとします。 DownloadFile
の
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つの観測が一つに平坦化されているので、3つの値は、すべてのダウンロードが完了していることを確認するために到着するために、あなたは待つことができます:あなたは今書くことができます。
SelectManyをコード内で使用した理由を理解できませんでした。リストのリストがありません - >あなたは平坦化されませんでした。コードを選択したばかりの場合は? –
'選択 'を使うと、観察可能なものが観測可能になります。 – Asti
もっと説明できますか?それは私のためにはっきりしていなかった、私はまだLINQとRXで新しい –
SelectManyはわずかである:すなわち
source.Select(selector).Merge();
、それは、観測のストリームにソース入力を選択し、結果のストリームに各観測を平ら。
私はこの短いビデオを受信するためにSelectManyを理解するのに役立つ(大理石の図のより高度な使用など)が見つかりました:http://channel9.msdn.com/Blogs/J.Van.Gogh/Reactive-Extensions-API-in-depth-SelectMany
http://stackoverflow.com/questions/3869329/rx-enumerableex-for-vs -enumerable-selectmany –
それは少し複雑に思えます。私はこの技術にはかなり新しいです。単純なサンプルを提供できますか? – StezPet