您可以扩展方法,将做到这一点:
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
你能给出样本输入和预期的输出吗? – 2011-02-08 18:38:10
整数序列是否以排序开头? – 2011-02-08 18:38:58