如何查找最接近条件的数组内的数据

jul*_*ion 2 c# arrays closest

我有一个双数组 Double[] array = new Double[5];

例如,如果数组包含如下数据:

{0.5,1.5,1.1,0.6,2}

如何找到最接近1的数字?输出应该是1.1,因为在这种情况下它是最接近1的那个.

Mar*_*zek 6

var result = source.OrderBy(x => Math.Abs(1 - x)).First();
Run Code Online (Sandbox Code Playgroud)

需要using System.Linq;在文件的顶部.这是O(n log(n))解决方案.

更新

如果你真的害怕性能并想要O(n)解决方案,你可以使用moreLINQ库中的MinBy()扩展方法.

或者您可以使用Aggregate()方法:

var result = source.Aggregate(
                new { val = 0d, abs = double.MaxValue },
                (a, i) => Math.Abs(1 - i) > a.abs ? a : new { val = i, abs = Math.Abs(1 - i) },
                a => a.val);
Run Code Online (Sandbox Code Playgroud)

  • @HenkHolterman这是*O(n*log(n))*解决方案.我知道*O(n)*是可能的,但除非数组有数千个元素,否则我不会害怕. (2认同)