C#LINQ列表查找最接近的数字

时间:2019-02-05 23:32:56

标签: c# list linq enumeration closest

我有一个数字列表,我想找到与搜索号码最接近的四个数字。

例如,如果搜索号码为400000,列表为:{150000, 250000, 400000, 550000, 850000, 300000, 200000),则最接近的4个数字为:

{300000, 400000, 250000, 550000}

任何帮助或建议将不胜感激。

1 个答案:

答案 0 :(得分:15)

您可以使用OrderBy通过每个项目与您的搜索词之间的差的绝对值对列表进行排序,从而使已排序列表中的第一个项目最接近您的数字,而最后一个项目是离数字最远。然后,您可以使用Take扩展方法获取所需的项目数:

cdef public void setStatus(MyStatus& status):
     cdef MyStatus * as_ptr = &status 
     as_ptr[0] = <const char *>"FOO"

输出:var list = new List<long> {150000, 250000, 400000, 550000, 850000, 300000, 200000}; var search = 400000; var result = list.OrderBy(x => Math.Abs(x - search)).Take(4); Console.WriteLine(string.Join(", ", result));