using System.Collections.Generic; using System.Linq; public interface INumberRange { int Min { get; set; } int Max { get; set; } } public class NumberRange : INumberRange { public int Min { get; set; } public int Max { get; set; } } public class RangeHelper { public static INumberRange GetRange(int min, int max) => new NumberRange { Min = min, Max = max }; public static IEnumerable<INumberRange> FindRanges(IEnumerable<int> input) { if (!input.Any()) yield break; var sortedList = input.OrderBy(x => x); var first = sortedList.FirstOrDefault(); var range = GetRange(first, first); foreach (var item in sortedList) { if (range.Max == item || range.Max == item - 1) { range.Max = item; continue; } var oldRange = range; range = GetRange(item, item); yield return oldRange; } yield return range; } }
682700cookie-checkC# Get number ranges from list of numbers