您可以擴展方法,將做到這一點:
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