所以我有一个对象数组,每个对象都有一个名为 value....
例如,如果我提供一个 25 的值并且我在 5 的范围内搜索(25 和最接近的值之间的差异小于 5),我有这个:
array[0].value = 16
array[1].value = 19
array[2].value = 22
然后它会执行一些我想要的代码。
有什么简单的方法可以解决这个问题吗?谢谢!
假设这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));
在伪代码中:
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。
如果您只关心数组中的一个值需要在目标数量内,您可以执行以下操作:
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
}
}
编辑:出于某种原因,我起初假设这些是浮点数,但相同的代码是任何基于数字的数据类型的逻辑。