19 Stimmen

Verkettung von IEnumerables in C#?

Gibt es einen einfachen eingebauten Weg, um eine geordnete Liste von IEnumerables zu nehmen und ein einziges IEnumerable zurückzugeben, das nacheinander alle Elemente im ersten, dann im zweiten usw. liefert.

Ich könnte sicherlich meine eigene schreiben, aber ich wollte wissen, ob es bereits einen Weg gibt, um diese scheinbar nützliche Aufgabe zu erledigen, bevor ich es tue.

24voto

JaredPar Punkte 699699

Versuchen Sie SelectMany.

IEnumerable Zusammenführen(IEnumerable> e){
 return e.SelectMany(x => x );
}

Der Zweck dieser Funktion ist es, eine Gruppe von IEnumerable> in ein IEnumerable umzuwandeln. Die zurückgegebenen Daten werden die ursprüngliche Reihenfolge beibehalten.

15voto

Marc Gravell Punkte 970173

Weiter zu JaredPars (korrekter) Antwort - auch Abfrage-Syntax:

var all = from inner in outer
          from item in inner
          select item;

13voto

Roger Lipscombe Punkte 84868

Weiter zu den (korrekten) LINQ-basierten Antworten...

Wenn Sie LINQ nicht verwenden möchten, können Sie eine ChainedEnumerable-Klasse erfinden, die yield verwendet:

public class ChainedEnumerable : IEnumerable
{
    private readonly IEnumerable[] _inners;

    public ChainedEnumerable(params IEnumerable[] inners)
    {
        _inners = inners;
    }

    public IEnumerator GetEnumerator()
    {
        foreach (IEnumerable inner in _inners)
        {
            foreach (T t in inner)
            {
                yield return t;
            }
        }
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

Verwenden Sie es wie folgt:

List a = new List { "A1", "A2", "A3" };
List b = new List { "B1", "B2", "B3" };
ChainedEnumerable chainedEnumerable =
    new ChainedEnumerable(a, b);
foreach (string s in chainedEnumerable)
    Console.WriteLine(s);

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