Diese Erweiterungsmethode ist in der Lage eine Liste an bestimmten Elementen aufzuspalten.
BeispielAusgangsliste: {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 NamespacesSystem
System.Collections.Generic
Für das BeispielSystem.Diagnostics
System.Linq
/// <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());
}