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

6

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

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

{300000, 400000, 250000, 550000}

非常感谢您的帮助和建议。

1个回答

16
您可以使用OrderBy来按照每个项与您的搜索项之间差值的绝对值进行排序,以便有序列表中的第一项最接近您的数字,最后一项最远离该数字。然后,您可以使用Take扩展方法来获取所需的项目数:
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));

输出: {400000, 300000, 250000, 550000}


2
而且,如果您想要“价格合适”规则(最接近但不超过),那么您需要改变的就是Lambda函数。 - Flydog57
是的,我尝试过了,但没有得到正确的结果。我传递了列表{20000,30000,40000,60000,80000,90000}。期望的结果是:{20000,30000,40000,60000},但我得到的是{90000,80000,60000,40000}。 - Owais Ahmed
@OwaisAhmed:调整lambda表达式以使其正确。 - Flydog57
我的错,订单无效。这里有测试过的解决方案(我会编辑这个)https://dotnetfiddle.net/Boolsn - Misiakw
@Flydog57 抱歉,你是什么意思? - Owais Ahmed
如果您想获取最接近的值,应该使用 OrderByOrderByDescending 会将差异最大的项目放在最前面。 - Rufus L

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接