namespace Lua; static class EnumerableEx { public static IEnumerable> GroupConsecutiveBy(this IEnumerable source, Func keySelector) { if (source == null) throw new ArgumentNullException(nameof(source)); if (keySelector == null) throw new ArgumentNullException(nameof(keySelector)); using var enumerator = source.GetEnumerator(); if (!enumerator.MoveNext()) { yield break; } List group = [enumerator.Current]; var previousKey = keySelector(enumerator.Current); while (enumerator.MoveNext()) { var currentKey = keySelector(enumerator.Current); if (!EqualityComparer.Default.Equals(previousKey, currentKey)) { yield return group; group = []; } group.Add(enumerator.Current); previousKey = currentKey; } yield return group; } }