一尘不染

在数组中寻找最接近的值

c#

int[] array = new int[5]{5,7,8,15,20};

int TargetNumber = 13;

对于目标数字,我想在数组中找到最接近的数字。例如,当目标数字为13时,在上面的数组中与它最接近的数字为15。如何在C#中以编程方式完成该目标?


阅读 1739

收藏
2020-05-19

共1个答案

一尘不染

编辑:调整了下面的查询以转换为使用long算术,以便我们避免溢出问题。

我可能会使用MoreLINQMinBy方法:

var nearest = array.MinBy(x => Math.Abs((long) x - targetNumber));

或者您 可以 使用:

var nearest = array.OrderBy(x => Math.Abs((long) x - targetNumber)).First();

…但这将对整个集合进行排序,而您实际上并不需要这些集合。诚然,对于一个 小的 数组来说,这不会有太大的不同……但是,与描述您 实际
要执行的操作相比,它感觉不太正确:根据某些函数找到具有最小值的元素。

请注意,如果数组为空,这两种方法都会失败,因此您应该先检查一下。

2020-05-19