var data = new[] { "17-24 36-41 53-58 138-143 155", "13-16 32 49-52 66-69", "13-16 32-35 49-52 66 83 100-103", }; foreach(var row in data.Split().ParseRange()) Console.WriteLine(string.Join(" ", row));
To make it work we add extension methods.
public static class ArrayEntentions { public static IEnumerable<IEnumerable<string>> Split(this IEnumerable<string> source, char separator = ' ') { return source.Select(x => x.Split(separator)); } public static IEnumerable<IEnumerable<int>> ParseRange(this IEnumerable<IEnumerable<string>> source) { return source.Select(ArrayEntentions.Parse); } public static IEnumerable<int> Parse(this IEnumerable<string> source) { foreach(var s in source) { int o; if (int.TryParse(s, out o)) { yield return o; } else { var interval = s.SplitInterval(); foreach(var i in Enumerable.Range(interval.Item1, interval.Item2)) yield return i; } } } public static Tuple<int, int> SplitInterval(this string source, char separator = '-') { var cells = source.Split(separator); if (cells.Length != 2) throw new FormatException(); var start = int.Parse(cells[0]); var count = int.Parse(cells[1]) - start + 1; return Tuple.Create(start, count); } }
13,14,15,16,32,49,50,51,52,66,67,68,69forelements_1[1]- Qwertiy ♦int[i,j]with only very large redundancy, better inint[i][j]- rdorn