Feedback

C# - LINQ: IEnumerable<IEnumerable<T>> zu T[,]

Veröffentlicht von am 20.06.2015
(0 Bewertungen)
Diese Erweiterungsmethode wandelt eine verschachtelte Auflistung in ein zweidimensionales Array um.

Benötigte Namespaces
System
System.Collections.Generic
System.Linq
GFU-Schulungen  [Anzeige]

XML und .NET Überblick

Um auf dem neuesten Wissensstand zu sein, sollten Sie unser aktuelles ASP .NET Komplett Seminar belegen.
Nach dem Seminar kennen Sie die wichtigsten Strömungen in der Software-Technologie

Visual Studio Team Foundation Server 2017/2015 (TFS) - Komplett 

/// <summary>
/// Erstellt ein zweidimensionales Array aus einer verschachtelten Liste.
/// </summary>
/// <typeparam name="T">Der Typ der Elemente in der Auflistung.</typeparam>
/// <param name="source">Die verschachtelte Quellauflistung</param>
/// <param name="throwIfLengthIsInconsistent"><c>true</c> wenn eine Exception ausgelöst werdne soll, wenn nicht alle Unterlisten die selbe Länge haben; andernfalls <c>false</c></param>
/// <param name="innerTo">Bestimmt ob eine innere Liste eine Zeile oder Spalte in dem Array sein soll.</param>
/// <returns>Ein zweidimensionales Array mit den Elementen von <paramref name="source"/></returns>
public static T[,] To2DArray<T>(this IEnumerable<IEnumerable<T>> source, bool throwIfLengthIsInconsistent, Array2DDirection innerTo)
{
    var x = source.Count();
    var y = throwIfLengthIsInconsistent ? source.Max(itemGroup => itemGroup.Count()) : source.First().Count();

    if (innerTo == Array2DDirection.Row)
    {
        var tmp = x;
        x = y;
        y = tmp;
    }

    var result = new T[x, y];

    int i = 0, j;
    foreach (var itemGroup in source)
    {
        j = 0;
        foreach (var item in itemGroup)
        {
            if (innerTo == Array2DDirection.Column)
                result[i, j] = item;
            else
                result[j, i] = item;
            ++j;
        }
        if (j != (innerTo == Array2DDirection.Column ? y : x) && throwIfLengthIsInconsistent)
            throw new ArgumentOutOfRangeException();
        ++i;
    }

    return result;
}

public enum Array2DDirection
{
    Column,
    Row,
}
Abgelegt unter LINQ, Erweiterungsmethode, Array, 2DArray.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!