編集 - 繰り返し処理要件が使用する、「同期」のやり方で両方のコレクションを通じて、すなわちを移動する場合、両方のコレクションで同じインデックスで
を配置しながら、最初のコレクションの最初の要素と2番目のコレクションの1番目の要素、次に2番目の2番目の要素など、副作用コードを実行する必要はありません。次に@sll's answerを参照し、.Zip()
を使用して、コレクションの1つが要素を使い果たすまで。代わりにforeach
の
より一般的に
、あなたはGetEnumerator()
メソッドを使用して、両方のコレクションのIEnumerable
からIEnumerator
にアクセスして、あなたは次の要素に移動する必要がある場合、コレクションにMoveNext()
を呼び出すことができますそのコレクション。この技法は、2つ以上の順序付けされたストリームを処理するときに、ストリームを実現する必要なく一般的です。他の人のよう
var stream1Enumerator = stream1.GetEnumerator();
var stream2Enumerator = stream2.GetEnumerator();
// i.e. Until stream1Enumerator runs out of
while (stream1Enumerator.MoveNext())
{
// Now you can iterate the collections independently
if (moon == 'Blue')
{
stream2Enumerator.MoveNext();
}
// Do something with stream1Enumerator.Current and stream2Enumerator.Current
}
などICollection
インターフェースとして、コレクションがマテリアライズされている場合は、指摘やインデックスをサポートしている、これは、最近かなり不器用な感じが、あなたはまた、添字[]
演算子を使用することができます。
var smallestUpperBound = Math.Min(collection1.Count, collection2.Count);
for (var index = 0; index < smallestUpperBound; index++)
{
// Do something with collection1[index] and collection2[index]
}
を
最後に、有用であり得る要素返さのインデックス順序を、提供overload of Linq's .Select()
もあります。
しかし、あなたの「ものをやる」の多くは、ここでAを作成し、ラムダに行くことができるようにすることができ
var alternatePairs = collection1.Select(
(item1, index1) => new
{
Item1 = item1,
Item2 = collection2[index1 % 2]
});
何について最初のforeach内の2番目のリストのforeachを持っていますか? –
デュープます:http://stackoverflow.com/questions/5630758/how-to-loop-through-two-lists-simultaneously – Jonathan
@ジョナサン - ではない重複 - VB.NETは、C#ではありません。 – Oded