在C#对象数组中搜索最近的浮点值

时间:2013-02-08 05:54:54

标签: c# arrays search object

所以我有一个对象数组,每个对象都有一个名为value的属性....我希望能够搜索这个对象数组,然后只有在可以找到某个范围内的值时运行一些代码。

例如,如果我提供的值为25,并且我在5的范围内搜索(25和最接近的值之间的差值<5),我有:

array[0].value = 16
array[1].value = 19
array[2].value = 22

然后它会执行我想要的一些代码。

有什么简单的方法可以解决这个问题吗?谢谢!

3 个答案:

答案 0 :(得分:2)

假设X是数组中对象的类。

public void WhenInRange(IEumerable<X> array, int value, int delta, Action<X> action)
{
   var s = value - delta;
   var e = value + delta;
   foreach (var match in array.Where(x => s <= x.value && e <= x.value))
      action(match);
}

要打印所有匹配项:

WhenInRange(array, 25, 5, (x) => Console.WriteLine(x.value));

答案 1 :(得分:0)

在伪代码中:

for every element of the array:
    let d = the absolute value of (element.value - target_value)
    if d is less than min_difference:
        do something
        break the loop

那就是它。您问题中的相应值为target_value 25和min_difference 5。

答案 2 :(得分:0)

如果您只关心数组中的一个值需要在目标金额范围内,您可以执行以下操作:

        float[] array = {1.0f, 10.0f, 15.7f};
        float target = 25;
        float range = 5;

        foreach (float f in array)
        {
            float temp = f - target;
            if (temp < range && temp > (-range))
            {
                //execute code here
            }
        }
编辑:我起初认为这些是由于某种原因浮动,但相同的代码是任何基于数字的数据类型的逻辑。