2010-12-15 19 views
14

İki listemiz varİki liste boyunca yineleme yapmak için foreach döngüsünü kullanma

List<object> a = new List<object>(); 
List<object> b = new List<object>(); 

Artık iki listenin elemanlarını yinelemek istiyorum. Her liste için bir foreach döngüsü yazarak bunu yapabilirim. Fakat böyle bir şey yapmak da mümkün mü?

foreach(object o in a, b) { 
o.DoSomething(); 
} 

Böyle bir şey mümkün olsaydı iyi olurdu:

foreach (object o in a && b) { 
    o.DoSomething(); 
} 
+2

Aynı anda veya önce diğerinden sonra tekrarlamak ister misiniz? –

+0

Önemli değil – RoflcoptrException

cevap

23
foreach(object o in a.Concat(b)) { 
o.DoSomething(); 
} 
+0

Teşekkürler, ancak Concat, kullandığım Koleksiyon tarafından desteklenmiyorsa ne olur? – RoflcoptrException

+3

List ve .Net sürüm 3.5 veya üstü kullanıyorsanız, Concat yöntemine sahip olursunuz. '' (A.Count> b.Count? A.Count: b.Count) 'yerine' System.Linq' –

6
foreach(object o in a.Concat(b)) { 
o.DoSomething(); 
} 
13

zaten olduğu gibi bireysel olarak o zaman Enumerable.Concat kullanabilirsiniz içlerinden yineleme yapmak istiyorsanız işaret etti.

Aynı anda her iki listeden de yineleme yapmak istiyorsanız, döngü içindeki her bir öğeye erişiminiz varsa, .NET 4.0'da kullanabileceğiniz bir Enumerable.Zip yöntemi vardır.

int[] numbers = { 1, 2, 3, 4 }; 
string[] words = { "one", "two", "three" }; 

var numbersAndWords = numbers.Zip(words, (first, second) => first + " " + second); 

foreach (var item in numbersAndWords) 
{ 
    Console.WriteLine(item); 
} 

Sonuç: Bu yapabileceğini başka bir yoludur

 
1 one 
2 two 
3 three 
1

: Aynı anda özel senaryolarda aynı uzunlukta (iki Listelerine üzerinde yineleme istiyorsanız

for (int i = 0; i < (a.Count > b.Count ? a.Count : b.Count); i++) 
{ 
    object objA, objB; 
    if (i < a.Count) objA = a[i]; 
    if (i < b.Count) objB = b[i]; 

    // Do stuff 
} 
+1

'u kullanarak '' ekleyin. 'Math.Max'ı (a.Count, b.Count) kullanabilirsiniz – CaffGeek

0

testte iki listeyi karşılaştırmak gibi), bence, döngü daha mantıklı geliyor:

for (int i = 0; i < list1.Count; i++) { 
    if (list1[i] == list2[i]) { 
     // Do something 
    } 
} 
İlgili konular