嘿,我想更快地查看数字,让我解释一下:
int[] num = { 55, 155};
if (funcNum == num[0],funcNum == num[0]+1,funcNum == num[0]+2,funcNum == num[0]+3,funcNum == num[1]-1,funcNum == num[1]-2,funcNum == num[1]-3)
// dostuff
所以基本上我想快速的方法来知道someNumber是否等于num(+ x到-x),就像num是55而且我想知道它是否等于从40到70的数字也算55呢
谢谢!
答案 0 :(得分:5)
您可以使用以下内容:
int range = 5; // your range here
if ((funcNum <= num[0] + range) && (funcNum >= num[0] - range)) {
// do something
}
如果你想测试数组中的所有数字,你可以这样做:
int range = 5; // your range here
bool inRange = true;
if (!num.Any(i => funcNum <= i + range && funcNum >= i - range))
{
inRange = false;
}
if (inRange)
{
// do something
}
(这里希望我能正确理解你的问题)
编辑:已修改,以便inRange
在true
处于任何范围内时为funcNum
,而非所有范围。
答案 1 :(得分:1)
我相信这就是你要问的问题?:
if (( someNumber <= num[0] + x ) && ( someNumber >= num[0] - x)){
//someNumber is within range
}
else{
//someNumber is not within range
}
查看&gt;,&lt;,&gt; =和&lt; =等相同标志,它将帮助您更快地执行检查。
如果你的num [0]是55,你的x是15,这意味着num [0] + x是70,而num [0] -x是40,如果someNumber小于或等于70, (&amp;&amp;)someNumber大于或等于40,然后检查返回true。
答案 2 :(得分:1)
假设范围不重叠(以下某些方法可以容忍多个范围,例如字典方法可以包含每个数字的范围列表)
如果您的可能数字范围很小,您只需将内存换成速度并将所有数字的地图映射到特定范围 - O(1):
{3,9},公差为1(所以期望2,3,4映射到3,而8,9,10到9)
var map = new Dictionary<int,int> ({2,3}, {3,3},{4,3}, {8,9}, {9,9, 10,9}};
if (map.ContainsKey(funcNum)) ....
请注意,如果您不需要知道确切的范围,可以使用某种位图/ HasSet
来降低内存要求。
如果有很多数字 - 对列表进行排序并找到二分搜索的可能范围(O(log number_of_ranges))。
如果范围的数量很小(测量,但我认为3-5将是目标)而不是常规循环并检查数字是否在当前旁边(如other answer所示)应该可以正常工作(O(number_of_ranges))。
答案 3 :(得分:0)
根据我上面的评论:if (a>40 && a<70)
是最快的(从代码的角度来看最干净)。
这是一个简单的操作,不需要调用另一个函数(即你不会使用更多的CPU周期)。