C# の ForEach を使用して 2 つのリストまたは配列を同時に反復する
C# では、同じものを使用して複数のリストまたは配列を同時に反復処理することができます。 foreach ステートメント。これにより、複数の反復的なアプローチの必要性がなくなり、プロセスが合理化されます。
Zip メソッドの使用
.NET Framework 4.0 以降を使用している場合は、次のことができます。組み込みの Zip メソッドを利用します。このメソッドは、指定された 2 つのシーケンスの要素をペアにして、一連のペアを作成します。
たとえば、2 つのリスト listA と listB がある場合、次のように Zip メソッドを利用できます:
var numbers = new [] { 1, 2, 3, 4 }; var words = new [] { "one", "two", "three", "four" }; var numbersAndWords = numbers.Zip(words, (n, w) => new { Number = n, Word = w });
このコードは、一連の匿名オブジェクトを作成します。各オブジェクトには Number プロパティと Word プロパティが含まれます。次に、foreach ステートメントを使用して、このシーケンスを反復処理できます。
foreach(var nw in numbersAndWords) { Console.WriteLine(nw.Number + nw.Word); }
タプルを使用した代替アプローチ
または、匿名オブジェクトを作成する代わりに、タプルを使用することもできます。保存するための Tuple.Create ヘルパー中括弧:
foreach (var nw in numbers.Zip(words, Tuple.Create)) { Console.WriteLine(nw.Item1 + nw.Item2); }
その他の反復オプション
Zip メソッドは 2 つのシーケンスを同時に反復する簡潔な方法を提供しますが、他のオプションもあります。 1 つの方法は、二重 for ループを使用することです:
for(int i = 0; i < listA.Count; i++) listB[i] = listA[i];
もう 1 つの方法は、Parallel.ForEach を使用することです:
Parallel.ForEach(numbers, number => { int index = Array.IndexOf(numbers, number); listB[index] = words[index]; });
最適な反復アプローチの選択
最適な反復アプローチは、特定の要件と使用している .NET のバージョンによって異なります。 Zip メソッドは効率的で多用途ですが、他のアプローチはレガシー シナリオやインデックスに基づいて値を割り当てる場合により適している可能性があります。
以上がC# で 2 つのリストを同時に反復するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。