public new static IEnumerable <IntegerRange> FromEnumerable(IEnumerable <int> enumerable, int maxInterval = 1) { var ranges = new List <IntegerRange>(); IntegerRange currentRange = null; foreach (var item in enumerable) { if (currentRange == null) { currentRange = new IntegerRange(item, item); ranges.Add(currentRange); continue; } if (currentRange.TryMerge(item, maxInterval)) { continue; } var range = ranges.FirstOrDefault(x => x != currentRange && x.TryMerge(item, maxInterval)); if (range != null) { currentRange = range; continue; } currentRange = new IntegerRange(item, item); ranges.Add(currentRange); } return(ranges.MergeIntersecting(maxInterval)); }
public static IEnumerable <WeekDayRange> FromEnumerable(IEnumerable <DayOfWeek> enumerable, int maxInterval = 1) { return(IntegerRange.FromEnumerable(enumerable.Cast <int>(), maxInterval).Select(x => new WeekDayRange((DayOfWeek)x.Start, (DayOfWeek)x.End))); }