편집 - 순회 두 컬렉션에 같은 인덱스에 위치하는 동안 요구 사항이를 사용하려면 '동기화'방식으로 두 컬렉션을 통해 예를 이동하는 경우
두 번째 컬렉션의 첫 번째 요소가있는 첫 번째 컬렉션의 첫 번째 요소, 두 번째의 두 번째 요소 등을 포함하여 부작용 코드를 수행 할 필요없이 @sll's answer을 참조하고 .Zip()
을 사용하여 동일한 인덱스에서 요소 쌍을 투영하고, 컬렉션 중 하나에서 요소가 없어 질 때까지
더 일반적으로 대신 foreach
의
, 당신은 GetEnumerator()
방법을 사용하여 두 컬렉션의 IEnumerable
에서 IEnumerator
에 액세스 할 수 있으며 당신이 다음 요소로 이동해야 할 때 다음 컬렉션 MoveNext()
전화 그 컬렉션. 이 기술은 두 개 이상의 정렬 된 스트림을 처리 할 때 스트림을 구체화 할 필요없이 일반적입니다. 컬렉션이 구체화하고 지원 색인, 이러한 ICollection
인터페이스로, 당신은 또한 첨자 []
연산자를 사용할 수있는 경우이 요즘 오히려 서투른 느낌이 있지만 다른 사람이 지적했듯이
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
}
:
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()
도 있는데 이는 유용 할 수도 있습니다.
아래의 대안으로 collection2
의 처음 두 요소 collection1
의 모든 요소를 짝됩니다
var alternatePairs = collection1.Select(
(item1, index1) => new
{
Item1 = item1,
Item2 = collection2[index1 % 2]
});
무엇에 대한 첫 번째 foreach 내부의 두 번째 목록에 foreach가 있습니까? –
Dupe : http : //stackoverflow.com/questions/5630758/how-to-loop-through-two-lists-simultaneously – Jonathan
@Jonathan - VB.NET은 C#이 아니며 중복되지 않습니다. – Oded