2016-09-16 19 views
-3

2つのIObservableを1つの方法で結合する最良の方法は、IEnumerablesをLINQ Joinメソッド(https://msdn.microsoft.com/en-us/library/bb534675(v=vs.110).aspx)を使用して結合するのと同じ方法ですか?2つのIObservableの内部結合

+5

A:

次のコードは、内側は2つのあなたはアイテムが1が最初に放出された、放出されているものの時間については全く気にしないと仮定するとの観測、またはそれらの間の相対的な時間に参加する実証します'結合 'はデカルト積とは大きく異なります。どちらを実際にしたいですか? – Servy

+0

ありがとう! –

答えて

-1

あなたは(結合またはデカルト積が必要な場合でも)あなたはしません。 IObservable<T>インターフェイスは、通知の購読を目的としています。

IObservable<T>IEnumerable<T>であることが確かである場合は、IEnumerable<T>にキャストしてください。言うまでもなく、これは最良のデザインではないかもしれません。

+0

これは、 'IEnumerable'はシーケンスの次の要素を得ることができます。技術的には本当ですが、そのようなアイテムのそれぞれを別のものに変換する、または別のシーケンスのアイテムとそれらのアイテムを結合するなど、そのことを実行できる何らかのものがあれば、実行できるあらゆる種類の操作があります。同じロジックが 'IObservable'に適用されます。 – Servy

+0

したがって、2つのIObservableストリームで同じ要素を見つけて別のIObservableにプッシュする最良の方法はありますか? –

+1

@MT明らかに、質問を編集して、本当に達成したいことの詳細を提供する必要があります。 –

1

本当に問題を明確にする必要があります。 IObservableは、時間の経過と共に間隔を空けて項目を放出することができます。 Observable-AとObservable-Bに参加していて、1時間後にアイテム1を出す場合は、条件を満たすでしょうか?

var factorsOfTwo = Observable.Interval(TimeSpan.FromSeconds(1)) 
    .Select(i => i * 3) 
    .Take(10); 

var factorsOfThree = Observable.Interval(TimeSpan.FromSeconds(1)) 
    .Select(i => i * 2) 
    .Take(10); 

var factorsOfBothTwoAndThree = factorsOfTwo.Join(factorsOfThree, 
     i => Observable.Never<object>(), 
     i => Observable.Never<object>(), 
     (a, b) => Tuple.Create(a, b) 
    ) 
    .Where(t => t.Item1 == t.Item2) 
    .Select(t => t.Item1); 

factorsOfBothTwoAndThree.Subscribe(l => Console.WriteLine(l)); 
関連する問題