ToHashSetAsync
1. 概要
ToHashSetAsync は、Observable シーケンスのすべての要素を収集し、HashSet<T> を Task<HashSet<T>> として返すオペレーターです。重複する要素は自動的に除去されます。シーケンスが完了するまで要素をバッファリングします。
2. シグネチャ
デフォルト等値比較によるハッシュセット変換
csharp
public static Task<HashSet<T>> ToHashSetAsync<T>(
this Observable<T> source,
CancellationToken cancellationToken = default)EqualityComparer<T>.Default を使用して重複を判定します。
カスタム等値比較子によるハッシュセット変換
csharp
public static Task<HashSet<T>> ToHashSetAsync<T>(
this Observable<T> source,
IEqualityComparer<T> comparer,
CancellationToken cancellationToken = default)IEqualityComparer<T> を指定して、独自の等値比較ロジックで重複を判定します。
オーバーロードの使い分け
| オーバーロード | 用途 |
|---|---|
ToHashSetAsync(source) | デフォルトの等値比較で十分な場合 |
ToHashSetAsync(source, comparer) | カスタム比較ロジックが必要な場合 |
3. マーブルダイアグラム
シーケンスのすべての要素を収集し、重複を除去した上で、完了時にハッシュセットを単一の結果として出力します。
4. サンプルコード
csharp
// 基本的な使い方:重複を除去してハッシュセットに変換
var source = new[] { 1, 2, 3, 2, 1, 4, 3 }.ToObservable();
HashSet<int> set = await source.ToHashSetAsync();
Console.WriteLine(set.Count); // 4
Console.WriteLine(set.Contains(3)); // Truecsharp
// カスタム比較子を使用(大文字小文字を無視)
var words = new[] { "Hello", "World", "hello", "WORLD" }.ToObservable();
HashSet<string> set = await words.ToHashSetAsync(StringComparer.OrdinalIgnoreCase);
Console.WriteLine(set.Count); // 2csharp
// 空のシーケンスは空のハッシュセットを返す
var empty = await Observable.Empty<int>().ToHashSetAsync();
Console.WriteLine(empty.Count); // 0