不要再投票了。这不是一个重复的问题。
我有一个2D数组,其中包含三个范围:
ranges = [
[1,4],
[6,10],
[15,20]
]
我想检查一个数字是否在其中一个范围内。
例如,7
为真,因为它在[6,10]
我试着用这种方式写作:
if ( (num >= ranges[0][0] && num =< ranges[0][1]) ||
(num >= ranges[1][0] && num =< ranges[1][1]) ||
(num >= ranges[2][0] && num =< ranges[2][1])) {
return True;
}
else {
return false;
}
我有两个问题:
(1)有没有更快的方法而不是写这个笨拙的代码?
(2)如果范围数组的大小未知(不固定),我该如何查看数字?
答案 0 :(得分:6)
您可以使用Array#some
并检查间隔。
glBindBuffer(GL_ARRAY_BUFFER,_vboID); //Buffering the data glBufferData(GL_ARRAY_BUFFER,_vboDATA[type].size()*sizeof(vboData),nullptr,GL_DYNAMIC_DRAW); glBufferSubData(GL_ARRAY_BUFFER,0,_vboDATA[type].size()*sizeof(vboData),_vboDATA[type].data()); glBindBuffer(GL_ARRAY_BUFFER,0);
方法测试数组中的某个元素是否通过了由提供的函数实现的测试。
some()
答案 1 :(得分:1)
您可以尝试这样的事情:
var isInsideAllRanges = ranges.some(function(range){
return num>=range[0] && num<=range[1];
});
var ranges = [
[1,4],
[6,10],
[15,20]
];
var num = 7;
var isInsideAllRanges = ranges.some(function(range){
return num>=range[0] && num<=range[1];
});
console.log(isInsideAllRanges);
some
方法:
some()方法测试数组中的某个元素是否通过了由提供的函数实现的测试。
有关详细信息,请查看Array.prototype.some()
答案 2 :(得分:1)
另一种解决方案是使用map
和reduce
。
var ranges = [
[1,4],
[6,10],
[15,20]
];
function check(number) {
return ranges.map(function(n){
return number >= n[0] && number <= n[1];
}).reduce(function(a, b){
return a || b
}, false);
}
console.log("1: " + check(1));
console.log("5: " + check(5));
console.log("7: " + check(7));
答案 3 :(得分:0)
ranges = [
[1, 4],
[6, 10],
[15, 20]
]
function inRange(n) {
for (var i = 0; i < ranges.length; i++) {
if (n >= ranges[i][0] && n <= ranges[i][1]) {
return true;
}
}
return false;
}
console.log(inRange(16),inRange(12),inRange(21))
&#13;