如何从0到20中生成5个随机且不重复的整数,最佳方法是什么?
我的想法是使用Math.random和floor函数进行循环5次并检查是否有重复,如果有,则再次随机。
你有什么更好的方法吗?
如何从0到20中生成5个随机且不重复的整数,最佳方法是什么?
我的想法是使用Math.random和floor函数进行循环5次并检查是否有重复,如果有,则再次随机。
你有什么更好的方法吗?
虽然我回答晚了,但还是想说:
var a=[];
while(a.length <3) {
var n = Math.round(Math.random() * 20);
if (a.indexOf(n)==-1) a.push(n);
}
=> [14, 17, 19]
编辑:一个比这里或其他所有发布的更好的解决方案可以在2008年这个问题提出时的这个答案中找到。总结一下:生成一个数组(如Darin在下面的回答中建议),并使用Knuth-Yates-Fisher shuffle来对其进行洗牌。不要使用朴素的洗牌算法,而是使用已知具有良好结果的算法。
这大概就是我会做的方式,是的。我可能会使用一个对象来跟踪我已经有的整数,因为这很方便。例如:
var ints = {};
然后,一旦您创建了一个新的随机数,请检查它并可能保留它:
if (!ints[number]) {
// It's a keeper
ints[number] = true;
results.push(number);
}