我有一个双数组 Double[] array = new Double[5];
例如,如果数组包含如下数据:
{0.5,1.5,1.1,0.6,2}
如何找到最接近1的数字?输出应该是1.1,因为在这种情况下它是最接近1的那个.
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)