private void Collate() { foreach (var group in progressions.GroupBy(x => x.stride)) { foreach (var a in group) { foreach (var b in group) { if (a.Last() == b.First()) { var collated = new Progression(group.Key); collated.AddRange(a); collated.AddRange(b.Skip(1)); collated.Sort(); collated.extended = a.extended || b.extended; progressions.Add(collated); progressions.Remove(a); progressions.Remove(b); } } } } }