C# の辞書を反復する最良の方法
Puneet Dobhal
2023年10月12日
-
C# でディクショナリを反復するために
for
ループを使用する -
foreach
ループを使用して C# の辞書を繰り返し処理する -
C# で
ParallelEnumerable.ForAll
メソッドを使用して辞書を反復する
C# の辞書は、キーと値のペアのコレクションです。これは、key
が単語を表し、value
がその意味である英語の辞書にいくぶん似ています。この記事では、辞書を反復するさまざまな方法を見ていきます。
表現の目的で、記事全体を通して、辞書オブジェクトの次の定義を検討します。
Dictionary<int, string> sample_Dict = new Dictionary<int, string>();
ここで、この辞書をトラバースするために使用できるいくつかのメソッドを見てみましょう。
C# でディクショナリを反復するために for
ループを使用する
for
ループメソッドは簡単で簡潔で、インデックスを使用して辞書を順次反復します。
using System;
using System.Collections.Generic;
public class Sample {
public static void Main() {
Dictionary<int, string> sample_Dict =
new Dictionary<int, string>() { { 0, "value_1" }, { 1, "value_2" }, { 2, "value_3" } };
for (int index = 0; index < sample_Dict.Count; index++)
System.Console.WriteLine(index + ":" + sample_Dict[index]);
}
}
出力:
0:value_1
1:value_2
2:value_3
気づくと思いますが、Dictionary オブジェクトを定義するときにイニシャライザリストも指定しています。イニシャライザリストを指定するときは、リストの各エントリに一意のキーがあることを確認してください。そうしないと、Run-time
例外が発生します。
foreach
ループを使用して C# の辞書を繰り返し処理する
foreach
ループは、選択できる別の選択肢です。
using System;
using System.Collections.Generic;
public class Sample {
public static void Main() {
Dictionary<int, string> sample_Dict =
new Dictionary<int, string>() { { 0, "value_1" }, { 1, "value_2" }, { 2, "value_3" } };
foreach (var entry in sample_Dict) System.Console.WriteLine(entry.Key + ":" + entry.Value);
}
}
出力:
0:value_1
1:value_2
2:value_3
上記のメソッドは、foreach
ループの遅延実装と考えることができます。KeyValuePair<TKey,TValue>
構造を使用して、foreach
メソッドを実装することもできます。
using System;
using System.Collections.Generic;
public class Sample {
public static void Main() {
Dictionary<int, string> sample_Dict =
new Dictionary<int, string>() { { 0, "value_1" }, { 1, "value_2" }, { 2, "value_3" } };
foreach (var entry in sample_Dict) System.Console.WriteLine(entry.Key + ":" + entry.Value);
}
}
出力:
0:value_1
1:value_2
2:value_3
C# で ParallelEnumerable.ForAll
メソッドを使用して辞書を反復する
このメソッドは、辞書内のキーと値のペアごとにマルチスレッド処理を組み込んでいるため、大きな辞書を反復する場合に便利です。
using System;
using System.Linq;
using System.Collections.Generic;
public class Sample {
public static void Main() {
/*User Code Here*/
Dictionary<int, string> sample_Dict =
new Dictionary<int, string>() { { 0, "value_1" }, { 1, "value_2" }, { 2, "value_3" } };
sample_Dict.AsParallel().ForAll(entry => Console.WriteLine(entry.Key + ":" + entry.Value));
}
}
出力:
0 : value_1 1 : value_2 2 : value_3
上記の中で最良の方法を分析する場合、特定のパラメーターを考慮する必要があり、結果は状況に依存します。ループ方法は簡潔で効果的ですが、大きな辞書を繰り返す場合、実行時の複雑さの点で実用的ではなくなります。
これは、ParallelEnumerable.ForAll
メソッドが登場する場所であり、特定のアプリケーションを設計する際の重要な要素である可能性がある重要な時間を節約する同時実行を可能にします。