22 Stimmen

Verwendung der foreach-Schleife, um zwei Listen zu durchlaufen

Ich habe zwei Listen

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

Nun möchte ich die Elemente beider Listen durchgehen. Ich könnte das tun, indem ich für jede Liste eine foreach-Schleife schreibe. Aber ist es auch möglich, etwas wie das zu tun?

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

Es wäre auch schön, wenn so etwas möglich wäre:

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

31voto

Itay Karo Punkte 17380
foreach(object o in a.Concat(b)) {
 o.DoSomething();
}

15voto

Mark Byers Punkte 761508

Wenn Sie sie einzeln durchgehen wollen, können Sie Enumerable.Concat wie bereits erwähnt wurde.

Wenn Sie über beide Listen gleichzeitig iterieren wollen und innerhalb Ihrer Schleife Zugriff auf ein Element aus jeder Liste haben wollen, dann gibt es in .NET 4.0 eine Methode Enumerable.Zip die Sie verwenden können.

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);
}

Ergebnis:

1 one
2 two
3 three

6voto

Andrey Punkte 57704
foreach(object o in a.Concat(b)) {
 o.DoSomething();
}

1voto

Iain Ward Punkte 9587

Dies ist eine weitere Möglichkeit:

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
}

1voto

Wenn Sie gleichzeitig über zwei Listen gleicher Länge iterieren wollen (besonders in Szenarien wie dem Vergleich zweier Listen in Tests), halte ich die for-Schleife für sinnvoller:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X