gpt4 book ai didi

c# - LINQ 查找一系列连续数字

转载 作者:太空狗 更新时间:2023-10-29 22:13:53 38 4
gpt4 key购买 nike

我有一个整数列表。我想在该列表中找到所有连续数字的运行,由起始索引和长度定义。因此,例如,对于 [1,2,3,5,7,8] 的输入列表,输出将是 [{1,3}, {5,1}, { 7,2}]。这很容易使用循环来完成,就像这样(未经测试的伪代码):

for(i=1, i < maxNum; i++)
{
number = list[i];
previousNumber = list[i-1];
if(number - previousNumber == 1)
{
runLength++;
}
else
{
result.Add(startingNumber, runLength);
runLength = 1;
startingNumber = number;
}
}

但我认为使用 LINQ 是可行的。有什么想法吗?

最佳答案

一种 linqish 方式可以是编写扩展方法 GroupWhile,如下所示(省略所有检查。未优化以易于理解。)

int[] list = new int[] { 1, 2, 3, 5, 7, 8 };
var result = list.GroupWhile((x, y) => y - x == 1)
.Select(x => new {i = x.First(), len = x.Count() })
.ToList();

public static IEnumerable<IEnumerable<T>> GroupWhile<T>(this IEnumerable<T> seq, Func<T,T,bool> condition)
{
T prev = seq.First();
List<T> list = new List<T>() { prev };

foreach(T item in seq.Skip(1))
{
if(condition(prev,item)==false)
{
yield return list;
list = new List<T>();
}
list.Add(item);
prev = item;
}

yield return list;
}

TODO:使用IGrouping :)

关于c# - LINQ 查找一系列连续数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20469416/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com