快速提问:
实现这行python代码的最佳方法是什么(从给定范围生成两个随机但不同的数字)...
random.sample(xrange(10), 2)
...在Javascript中?
提前致谢!
马丁
快速提问:
实现这行python代码的最佳方法是什么(从给定范围生成两个随机但不同的数字)...
random.sample(xrange(10), 2)
...在Javascript中?
提前致谢!
马丁
这是我使用拼接的尝试:
var a = [1,2,3,4,5,6,7,8,9,10];var sample = [];
sample.push(a.splice(Math.random()*a.length,1));
sample.push(a.splice(Math.random()*a.length,1));
封装在一个函数中:
function sample_range(range, n) {
var sample = [];
for(var i=0; i<n; i++) {
sample.push(range.splice(Math.random()*range.length,1));
}
return sample;
}
var sample = sample_range([1,2,3,4,5,6,7,8,9,10], 2);
我们还可以将函数粘贴到 Array.prototype 中,使其具有类似点符号的语法:
Array.prototype.sample_range = function(n) {
var sample = [];
for(var i=0;i<n;i++) {
sample.push(this.splice(Math.random()*this.length,1));
}
return sample;
};
var sample = [1,2,3,4,5,6,7,8,9,10].sample_range(2);
如果要生成 0 和 之间的随机数n
,一种方法是随机选择 number r1
in 0..n
then pick r2
from0..n-1
并将 1 添加到r2
if r2 >= r1
。
function sample(range,tot){
if(tot > range){
alert('infinite loop?');
return [];
}
var myRandomNumbers = [];
for(var i = 0; i<tot; i++){
var randN = Math.floor(Math.random()*range);
while(myRandomNumbers.contains(randN)){
randN = Math.floor(Math.random()*range);
}
myRandomNumbers.push(randN);
}
return myRandomNumbers
}
var nums = sample(10,2); //array containing 2 distinct random numbers
生成一个,然后重复生成第二个,直到它与第一个不同。它需要运行更长时间的可能性很小,但除非您需要生成数十亿个数字,否则您不会看到任何性能下降。