gpt4 book ai didi

c# - LINQ(或伪代码)按邻近度对项目进行分组

转载 作者:太空狗 更新时间:2023-10-30 00:56:49 24 4
gpt4 key购买 nike

有没有人能告诉我如何使用 LINQ(或必要时更合适的东西)来创建一个整数列表列表,这些整数列表按彼此的接近程度分组。

基本上,我想创建数字在任何其他数字的 5 以内的组。

所以,给定:

3 27 53 79 113 129 134 140 141 142 145 174 191 214 284 284

生成以下列表:

3 
27
53
79
113
129 134
140 141 142 145
174
194
214
284 284

谢谢!

最佳答案

LINQ 不太擅长滚动求和等操作。这里使用简单的 foreach 循环更好:

static IEnumerable<IEnumerable<int>> GroupByProximity(
this IEnumerable<int> source, int threshold)
{
var g = new List<int>();
foreach (var x in source)
{
if ((g.Count != 0) && (x > g[0] + threshold))
{
yield return g;
g = new List<int>();
}
g.Add(x);
}
yield return g;
}

示例:

var source = new int[]
{
3, 27, 53, 79, 113, 129, 134, 140, 141, 142, 145, 174, 191, 214, 284, 284
};

foreach (var g in source.GroupByProximity(5))
{
Console.WriteLine(string.Join(", ", g));
}

输出:

3275379113129, 134140, 141, 142, 145174191214284, 284

关于c# - LINQ(或伪代码)按邻近度对项目进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6785085/

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