Foreach über eine Sammlung von IEnumerables

8

Ich habe 3 (Edit) sich gegenseitig ausschließende IEnumerables, über die ich iterieren möchte. Ich möchte so etwas machen:

%Vor%

Der beste Weg, an den ich denken kann, ist:

%Vor%

Gibt es einen prägnanteren Weg, dies zu tun? Es scheint so, als würde die Kombination von IEnumberables trivial sein.

    
sdr 22.03.2010, 20:48
quelle

4 Antworten

20

Mit LINQ:

%Vor%

Für Info ist der Unterschied zwischen Union und Concat , dass Union zusätzliche Arbeit leistet, um die Eindeutigkeit zu garantieren; Wenn Sie also keine Duplikate erwarten (oder alternativ: nichts dagegen haben), ist Concat schneller.

    
Marc Gravell 22.03.2010, 20:51
quelle
3

Wie in anderen Antworten erwähnt, unternimmt Union zusätzliche Arbeit, um Dubletten zu eliminieren, Concat verkettet einfach die Sequenzen. Wie ich in einem Kommentar oben bemerkt habe, gibt es jedoch Leistungskosten für tief verschachtelte Konkat. Sie könnten auch einen SelectMany-Befehl verwenden, um eine Reihe von Iteratoren zu reduzieren:

%Vor%

Sie könnten feststellen, dass Sie flexibler sein sollten, wenn Sie feststellen, dass Sie tatsächlich über mehr als drei zu iterierende Listen verfügen.

    
Eric Lippert 22.03.2010 22:47
quelle
0
___ answer2495641 ___

Mit LINQ:

%Vor%

Für Info ist der Unterschied zwischen %code% und %code% , dass %code% zusätzliche Arbeit leistet, um die Eindeutigkeit zu garantieren; Wenn Sie also keine Duplikate erwarten (oder alternativ: nichts dagegen haben), ist %code% schneller.

    
___ qstnhdr ___ Foreach über eine Sammlung von IEnumerables ___ qstntxt ___

Ich habe 3 (Edit) sich gegenseitig ausschließende IEnumerables, über die ich iterieren möchte. Ich möchte so etwas machen:

%Vor%

Der beste Weg, an den ich denken kann, ist:

%Vor%

Gibt es einen prägnanteren Weg, dies zu tun? Es scheint so, als würde die Kombination von IEnumberables trivial sein.

    
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ answer2495643 ___

Gibt es einen Grund, warum Sie es in einer Schleife machen müssen? Wenn ja, ist der zweite Weg wahrscheinlich der beste. Es gibt nichts, was wie der erste Weg funktioniert.

Wenn es nicht zwingend notwendig ist, dies in einer Schleife zu tun, würde ich es in drei Schleifen machen, die zeiteffizienter sind.

    
___ answer2496303 ___

Wie in anderen Antworten erwähnt, unternimmt Union zusätzliche Arbeit, um Dubletten zu eliminieren, Concat verkettet einfach die Sequenzen. Wie ich in einem Kommentar oben bemerkt habe, gibt es jedoch Leistungskosten für tief verschachtelte Konkat. Sie könnten auch einen SelectMany-Befehl verwenden, um eine Reihe von Iteratoren zu reduzieren:

%Vor%

Sie könnten feststellen, dass Sie flexibler sein sollten, wenn Sie feststellen, dass Sie tatsächlich über mehr als drei zu iterierende Listen verfügen.

    
___ tag123foreach ___ foreach ist ein Schleifenkonstrukt, das ein bestimmtes Codeelement für jedes Element in einer Liste / Sammlung / einem Array ausführt. Im Gegensatz zu einer for-Schleife erfordert die foreach-Schleife nicht, dass der Coder eine Zählervariable beibehält, um Off-by-One-Fehler (Fencepost) zu vermeiden. Es wird empfohlen, wenn eine einfache Iteration über ganzes Array / Liste / Sammlung erforderlich ist . ___ tag123ienumerable ___ IEnumerable und sein generisches Gegenstück IEnumerable sind .NET-Schnittstellen zum Iterieren (oder Aufzählen) einer Sammlung von Elementen. ___
Elisha 22.03.2010 20:50
quelle
0

Gibt es einen Grund, warum Sie es in einer Schleife machen müssen? Wenn ja, ist der zweite Weg wahrscheinlich der beste. Es gibt nichts, was wie der erste Weg funktioniert.

Wenn es nicht zwingend notwendig ist, dies in einer Schleife zu tun, würde ich es in drei Schleifen machen, die zeiteffizienter sind.

    
Scott J 22.03.2010 20:51
quelle

Tags und Links