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]

JavaScript für .NET-Entwickler

Sie sind .NET-Entwickler und nun stehen Sie vor der Aufgabe, JavaScript in Ihre Arbeit einzubinden. Die Schulung vermittelt Ihnen die JavaScript Grundlagen und die Funktionen der Scriptsprache. Sie wissen, wie objektorientierte Programmierung in JavaScript funktioniert und lernen abschließend Best Practicies Fälle kennen.

VB.NET Aufbau

Sie verfügen nach der Schulung über fundierte Kenntnisse in der Arbeit mit objektorientierten Modellen in VB.NET und können wiederverwendbare Komponenten eigenständig erzeugen.

/// <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!