Feedback

C# - LINQ Erweiterung: Split

Veröffentlicht von am 19.07.2014
(0 Bewertungen)
Diese Erweiterungsmethode ist in der Lage eine Liste an bestimmten Elementen aufzuspalten.

Beispiel
Ausgangsliste: {1, 2, 3, 2, 4, 5, 3, 6, 5, 7, 3, 3, 5}
Splitten an Elementen = 3
Ergebnis: {1, 2}, {2, 4, 5}, {6, 5, 7}, { }, {5}
Als Code:
int[] list = { 1, 2, 3, 2, 4, 5, 3, 6, 5, 7, 3, 3, 5 };
var res = list.Split(x => x == 3).Select(x => x.ToArray()).ToArray();
if (Debugger.IsAttached) Debugger.Break();


Benötigte Namespaces
System
System.Collections.Generic
Für das Beispiel
System.Diagnostics
System.Linq
GFU-Schulungen  [Anzeige]

VB.NET 2017/2015/2013 Komplett

Ziel des Seminars ist der flexible Umgang mit VB.NET, wie z.B. die damit verbundene eigenständige Entwicklung von Programmen oder das Verwenden von Datenbanken.

Visual Studio Team Foundation Server 2017/2015 (TFS) für Projektmitglieder - Kompakt

Nach Teilnahme an dieser Schulung sind Ihnen die Grundlagen von ALM geläufig. Sie planen und steuern Projekte effizient mit dem Visual Studio Team Foundation Server.

/// <summary>
/// Spaltet eine Sequenz von Elementen, an Elementen mit bestimmten Merkmalen, in mehrere Teilsequenzen auf.
/// </summary>
/// <typeparam name="T">Der Typ der Elemente.</typeparam>
/// <param name="source">Die zu spaltende Sequenz.</param>
/// <param name="splitter">Die Funktion, mit der die Elemente ermittelt werden, an denen die Sequenz aufgespalten werden soll.</param>
/// <returns>Eine Sequenz mit Teilsequenzen von <paramref name="source"/>, aufgespalten an Elementen, die mit <paramref name="splitter"/> ermittelt wurden.</returns>
public static IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> source, Func<T, bool> splitter)
{
    using (var enu = source.GetEnumerator())
    {
        while (enu.MoveNext())
        {
            yield return GetInnerSequence(enu, splitter).ToList();
        }
    }
}

private static IEnumerable<T> GetInnerSequence<T>(IEnumerator<T> enu, Func<T, bool> splitter)
{
    do
    {
        if (splitter(enu.Current))
            yield break;
        yield return enu.Current;
    } while (enu.MoveNext());
}
Abgelegt unter Erweiterungsmethode, Extension, Linq, Split.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!