【问题标题】:searching C# array of objects for nearest float value在 C# 对象数组中搜索最接近的浮点值
【发布时间】:2013-02-08 05:54:54
【问题描述】:

所以我有一个对象数组,每个对象都有一个名为 value....

例如,如果我提供一个 25 的值并且我在 5 的范围内搜索(25 和最接近的值之间的差是

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

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

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

【问题讨论】:

  • 如果你的数组是排序的,我会使用“二分查找”的方式。
  • 听起来很初级,你试过什么?

标签: c# arrays search object


【解决方案1】:

假设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));

【讨论】:

    【解决方案2】:

    在伪代码中:

    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 of 25 和 min_difference of 5。

    【讨论】:

      【解决方案3】:

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

              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
                  }
              }
      

      编辑:出于某种原因,我起初假设这些是浮点数,但相同的代码是任何基于数字的数据类型的逻辑。

      【讨论】:

      • 好吧 OP 在标题中说浮点数,但随后使用整数!别担心。
      猜你喜欢
      • 2012-09-18
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多