>我有一个浮点数数组。我还有另一个浮标。
我希望遍历数组并找到它的索引,其值最接近我的其他浮点数。我该怎么做?
简单代码:
float x = 2.25;
float closest_value=array[0];
float subtract_result = Math.Abs(closest_value - x) ;
for (int i = 1; i < array.length; i++)
{
if (Math.Abs(array[i] - x) < subtract_result)
{
subtract_result = Math.Abs(array[i] - x);
closest_value = array[i];
}
}
LINQ 的一个可能的解决方案:
var index = arrayOfFloats
.Select((i, f) => Tuple.Create(i, Math.Abs(f - myFloat)))
.OrderBy(t => t.Item2)
.First().Item1
它将数组中的每个数字投影到 [index, absolute difference] 元组,按差异排序并获取第一个(最小差异)项的索引。
var index = Array.IndexOf(array, array.OrderBy(a => Math.Abs(floatNum - a)).First());