Вы можете сделать метод расширения, который будет делать это:
static class EnumerableIntExtensions {
public static IEnumerable<IEnumerable<T>> ToContiguousSequences<T>(
this IEnumerable<T> sequence,
Func<T, T> next
) {
Contract.Requires(sequence != null);
Contract.Requires(next != null);
var e = sequence.GetEnumerator();
if (!e.MoveNext()) {
throw new InvalidOperationException("Sequence is empty.");
}
var currentList = new List<T> { e.Current };
while (e.MoveNext()) {
T current = e.Current;
if (current.Equals(next(currentList.Last()))) {
currentList.Add(current);
}
else {
yield return currentList;
currentList = new List<T> { current };
}
}
yield return currentList;
}
}
Использование:
var sequence = Enumerable.Range(1, 100)
.Concat(new[] { 102 })
.Concat(Enumerable.Range(104, 97));
var sequences = sequence.ToContiguousSequences(n => n + 1);
foreach(var contiguousSequence in sequences) {
Console.WriteLine(String.Join(", ", contiguousSequence.Select(n => n.ToString())));
}
Выход:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100
102
104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200
Вы могли бы предоставить образец ввода и ожидаемый выход? –
Является ли последовательность целых чисел упорядоченной для начала? –