可変長配列に順番に組み合わせる必要のある要素をIObservable<T>
返す「値」があり、次の配列の長さを指示T
する「コントロール」IObservable<int>
があります。要素を削除したり、繰り返したり、結果を乱したりすると、結果が無意味になります。
これは、私がRx.NETで書き直しているシリアル接続されたロボットプロジェクト用です。
IObservable<char> values = new [] {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H' }.ToObservable();
IObservable<int> control = new [] { 1, 4, 2 }.ToObservable();
IObservable<char[]> result = control.SelectMany(length => values.Take(length).ToArray());
私はこのようなものを見たいです:
values ----A--B--C--D--E--F--G--H-->
control --1-----4---------------2--->
result ---[A]---------[BCDE]--[FG]->
しかし、これまでの私の試みは結果として
-[A]-[AB]-[ABCD]->
いくつかのヘルパーサブジェクトを作成して、新しいオブザーバブルを準備/作成し、必要な新しいオブザーバブルを構築できます。これらの種類のオブザーバブルのサブジェクトを作成できます。
control
。(1, 4, 2)
あなたから取得し(guid_1, guid_2, guid_2, guid_2, guid_2, guid_3, guid_3)
ます。これをオブザーバブルと呼びrepeatSize
ます。Zip()
演算子を使用して、repeatSize
とからそれぞれ1つの値を結合しますvalues
。次の値でオブザーバブルを取得します((A,guid_1), (B,guid_2), (C,guid_2), (D,guid_2), (E,guid_2), (F,guid_3), (G,guid_3))
。これをオブザーバブルと呼びzippedValues
ます。zippedValues
、元の値をリストに追加/追加します。また、repeatSize
オブザーバブルから前の値を保存します。の現在の値と比較してくださいrepeatSize
。変更された場合(からguid_2
へのようにguid_3
)、終了/開始に到達したことがわかるので、入力されたリストを新しいオブザーバブルに送信できます。その後、リストを再度リセットして、再度入力を開始します。2〜3個のSubject<T>
オブジェクトを作成し、それらをサブスクライブし、いくつかのOnNext()
呼び出しを使用して、他のオブザーバブルのサブスクリプションからそれらを埋める必要がある場合があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加