IObservable <T>をIObservable <IObservable <T >>に分割します

ジェームズL

新しいストリームの開始を指定するために特定の番兵値を出力することがあるソースストリームがあります。ストリームをに変換したいのですがIObservable<IObservable<T>>誰もがエレガントな方法を考えることができますか?

セオドア・ゾリアス

これでうまくいくはずです:

    observable = observable
        .Publish()
        .RefCount();
    var splitted = observable
        .Window(observable.Where(x => x == SENTINEL))
        .Select(c => c.Where(x => x != SENTINEL));

完全な例:

    const int SENTINEL = -1;
    var observable = Observable
        .Interval(TimeSpan.FromMilliseconds(100))
        .Select(x => x + 1)
        .Take(12)
        .Select(x => x % 5 == 0 ? SENTINEL : x) // Every fifth is a sentinel
        .Publish()
        .RefCount();
    observable
        .Window(observable.Where(x => x == SENTINEL))
        .Select(c => c.Where(x => x != SENTINEL))
        .Select((c, i) => c.Select(x => (i, x))) // Embed the index of the subsequence
        .Merge() // Merge them again
        .Do(x => Console.WriteLine($"Received: {x}"))
        .Subscribe();
    await observable.LastOrDefaultAsync(); // Wait it to end

出力:

受信:(0、1)
受信:(0、2)
受信:(0、3)
受信:(0、4)
受信:(
1、6)
受信:(1、7 受信:(
1、8 受信:(
1、9)
受信:(2、11 受信:(2、12)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Turn an IObservable<IEnumerable<T>> into an IEnumerable<IObservable<T>>

分類Dev

linqクエリを使用したIObservable <T>

分類Dev

IObservable<Task<T>> を順序保持で IObservable<T> にアンラップする

分類Dev

IObservable <IEnumerable <T >>을 IEnumerable <IObservable <T >>로 변환

分類Dev

Spit IObservable<T> exceptions in a separate IObservable<Exception> and continue normally

分類Dev

IObservable <int>を使用してIObservable <T>をさまざまな長さのIObservable <T []>にセグメント化する方法

分類Dev

IObservable <T>例外を別のIObservable <Exception>に吐き出し、通常どおり続行します

分類Dev

Converting a IEnumerable<T> to IObservable<T>, with maximum parallelism

分類Dev

IObservable <IEnumerable <T >>は本当にIObservable <T>である必要がありますか?

分類Dev

例外処理を除いて、IEnumerable <Task <T >>をIObservable <T>に変換します

分類Dev

IObservable <T>をIAsyncEnumerable <T>に変換することは可能ですか?

分類Dev

最大の並列処理でIEnumerable <T>をIObservable <T>に変換する

分類Dev

IObservable <MyObject>をIObservable <bool>に変換します

分類Dev

IObservableを実装する方法

分類Dev

IObservable <T>からデータグリッドを自動的に更新する方法

分類Dev

IObservable <(long、float)>をIObservable <long>とIObservable <float>の2つのオブザーバブルに分割します

分類Dev

IObservable <T>からタスクへ

分類Dev

IObservable <byte []>を文字に分割し、次に行に分割します

分類Dev

IObservableを上から排出します

分類Dev

IObservable <T> .ToTask拡張メソッドはどこにありますか?

分類Dev

IObservableとIObserverを分離する方法

分類Dev

IObservable <byte []>変換

分類Dev

How can I make an IObservable from a queue, so that the sequence doesn't end when the queue is empty?

分類Dev

Func <T>に基づいてIObservable <T>をチャンクにウィンドウ/バッファリングする方法

分類Dev

Grouping IObservable by both property and timeout

分類Dev

Grouping IObservable by both property and timeout

分類Dev

IObservable.Subscribe(IObserver <T>オブザーバー)オーバーロードとは何ですか?

分類Dev

ReactiveUI:IObservable.Transform()は通知を転送しません

分類Dev

カスタムEventHandlerをIObservableに変換する

Related 関連記事

  1. 1

    Turn an IObservable<IEnumerable<T>> into an IEnumerable<IObservable<T>>

  2. 2

    linqクエリを使用したIObservable <T>

  3. 3

    IObservable<Task<T>> を順序保持で IObservable<T> にアンラップする

  4. 4

    IObservable <IEnumerable <T >>을 IEnumerable <IObservable <T >>로 변환

  5. 5

    Spit IObservable<T> exceptions in a separate IObservable<Exception> and continue normally

  6. 6

    IObservable <int>を使用してIObservable <T>をさまざまな長さのIObservable <T []>にセグメント化する方法

  7. 7

    IObservable <T>例外を別のIObservable <Exception>に吐き出し、通常どおり続行します

  8. 8

    Converting a IEnumerable<T> to IObservable<T>, with maximum parallelism

  9. 9

    IObservable <IEnumerable <T >>は本当にIObservable <T>である必要がありますか?

  10. 10

    例外処理を除いて、IEnumerable <Task <T >>をIObservable <T>に変換します

  11. 11

    IObservable <T>をIAsyncEnumerable <T>に変換することは可能ですか?

  12. 12

    最大の並列処理でIEnumerable <T>をIObservable <T>に変換する

  13. 13

    IObservable <MyObject>をIObservable <bool>に変換します

  14. 14

    IObservableを実装する方法

  15. 15

    IObservable <T>からデータグリッドを自動的に更新する方法

  16. 16

    IObservable <(long、float)>をIObservable <long>とIObservable <float>の2つのオブザーバブルに分割します

  17. 17

    IObservable <T>からタスクへ

  18. 18

    IObservable <byte []>を文字に分割し、次に行に分割します

  19. 19

    IObservableを上から排出します

  20. 20

    IObservable <T> .ToTask拡張メソッドはどこにありますか?

  21. 21

    IObservableとIObserverを分離する方法

  22. 22

    IObservable <byte []>変換

  23. 23

    How can I make an IObservable from a queue, so that the sequence doesn't end when the queue is empty?

  24. 24

    Func <T>に基づいてIObservable <T>をチャンクにウィンドウ/バッファリングする方法

  25. 25

    Grouping IObservable by both property and timeout

  26. 26

    Grouping IObservable by both property and timeout

  27. 27

    IObservable.Subscribe(IObserver <T>オブザーバー)オーバーロードとは何ですか?

  28. 28

    ReactiveUI:IObservable.Transform()は通知を転送しません

  29. 29

    カスタムEventHandlerをIObservableに変換する

ホットタグ

アーカイブ