Skip to content

Index

1. 概要

Index は、ソース Observable の各要素に 0 始まりのインデックスを付与するオペレーターです。Observable<Unit> に対してはインデックス番号のみを発行し、それ以外の型に対しては (index, value) のタプルとして発行します。

2. シグネチャ

Observable<Unit> 用オーバーロード

csharp
public static Observable<int> Index(
    this Observable<Unit> source)

Observable<Unit> を受け取り、各要素を 0 始まりのインデックス値(int)に変換して発行します。

ジェネリック型オーバーロード

csharp
public static Observable<(int Index, T Value)> Index<T>(
    this Observable<T> source)

各要素に 0 始まりのインデックスを付与し、(int Index, T Value)ValueTuple として発行します。

overload の使い分け

オーバーロード用途
Observable<Unit>イベント発生回数のカウントなど、値が不要でインデックスのみが必要な場合。
ジェネリック型元の値とインデックスの両方が必要な場合。

3. マーブルダイアグラム

Index のマーブルダイアグラム

ソースの各要素に対して、発行順に 0 から始まるインデックスが付与されます。

4. サンプルコード

csharp
// ジェネリック型:要素とインデックスのタプル
var source = new Subject<string>();

source.Index()
    .Subscribe(x => Console.WriteLine($"Index={x.Index}, Value={x.Value}"));

source.OnNext("A"); // Index=0, Value=A
source.OnNext("B"); // Index=1, Value=B
source.OnNext("C"); // Index=2, Value=C
csharp
// Observable<Unit> 用:インデックスのみ
var clicks = new Subject<Unit>();

clicks.Index()
    .Subscribe(i => Console.WriteLine($"Click #{i}"));

clicks.OnNext(Unit.Default); // Click #0
clicks.OnNext(Unit.Default); // Click #1
clicks.OnNext(Unit.Default); // Click #2