Wie kombiniere ich mehr als zwei generische Listen in C # Zip?
Habe ich drei (es ist möglich, mehr als 3-4 generische Liste, aber in diesem Beispiel wollen wir 3) generische Listen.
List<string> list1
List<string> list2
List<string> list3
alle Listen haben gleich viele Elemente (gleiche gilt).
Verwendet, dass ich zum kombinieren von zwei Listen mit REIßVERSCHLUSS :
var result = list1.Zip(list2, (a, b) => new {
test1 = f,
test2 = b
}
Verwendet, dass ich für foreach
- Anweisung, um zu vermeiden foreach
jede Liste, wie
foreach(var item in result){
Console.WriteLine(item.test1 + " " + item.test2);
}
Wie zu verwenden simmilary mit Reißverschluss für drei Listen ?
Dank
EDIT:
Ich möchte gerne:
List<string> list1 = new List<string>{"test", "otherTest"};
List<string> list2 = new List<string>{"item", "otherItem"};
List<string> list3 = new List<string>{"value", "otherValue"};
nach ZIP (ich weiß nicht, Methode), möchte ich das Ergebnis (in VS2010 debug-Modus)
[0] { a = {"test"},
b = {"item"},
c = {"value"}
}
[1] { a = {"otherTest"},
b = {"otherItem"},
c = {"otherValue"}
}
Wie zu tun ?
InformationsquelleAutor der Frage Snake Eyes | 2012-04-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der offensichtlichste Weg für mich wäre, die Nutzung
Zip
zweimal.Beispielsweise
kombinieren würde (add), die Elemente der drei
List<int>
Objekte.Update:
Könnten Sie eine neue Erweiterung Methode, die wirkt wie ein
Zip
mit dreiIEnumerable
s, etwa so:Die Nutzung (in den gleichen Kontext wie oben) wird jetzt:
Ähnlich, Sie drei Listen können nun kombiniert werden mit:
InformationsquelleAutor der Antwort GolfWolf
InformationsquelleAutor der Antwort G.Y
Kombinieren Sie viele Listen in C# mit cascade zip Methoden und anonyme Klassen und Tupel Ergebnis.
Ist das Ergebnis:
InformationsquelleAutor der Antwort andrew.fox
Gibt es eine Recht interessante Lösung, die ich bin mir dessen bewusst. Es ist interessant, meist aus Pädagogischer Perspektive, aber wenn man ausführen muss, zippen und verschiedenen Grafen von Listen VIEL, dann wird es auch nützlich sein.
Diese Methode überschreibt .NET LINQ
SelectMany
Funktion, die durch eine Konvention, wenn Sie die LINQ - Abfrage-syntax. Die standard -SelectMany
Umsetzung tut ein Kartesisches Produkt. Die overrided man tun kann, flitzen statt. Die tatsächliche Umsetzung könnte sein:Sieht es ein bisschen beängstigend, aber es ist eine Logik packen die, wenn Sie einmal geschrieben ist, kann an vielen Orten verwendet werden und der client code sieht ziemlich nett - Sie können zip beliebige Anzahl von
IEnumerable<T>
mit standard-LINQ-Abfrage-syntax:Wenn Sie dann ausführen:
Erhalten Sie:
Halten, sollten Sie diese Erweiterung private innerhalb Ihrer Klasse, denn sonst wird sich radikal ändern, das Verhalten der Sie umgebenden code. Auch eine neue Art nützlich sein wird, so dass es nicht colide mit standard-LINQ-Verhalten für IEnumerables.
Für pädagogische Zwecke habe ich mal eine kleine c# - Projekt mit dieser Erweiterung Methode + paar Vorteile: https://github.com/lukiasz/Zippable
Auch, wenn Sie das interessant finden, empfehle ich Jon Skeet ist Reimplementing LINQ to Objects Artikel.
Spaß haben!
InformationsquelleAutor der Antwort lukiasz