快速的問題:的javascript:從範圍生成2個隨機,但不同數字
什麼是實現這一行的Python代碼的最佳方式(從產生一個給定的範圍內兩個隨機但不同的數字)...
random.sample(xrange(10), 2)
...在Javascript中?
在此先感謝!
馬丁
快速的問題:的javascript:從範圍生成2個隨機,但不同數字
什麼是實現這一行的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到之間的隨機數210,一種方法是隨機挑選中的0..n
,然後從0..n-1
中挑選r2
,如果r2 >= r1
爲r2
則加1。
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
在此O(n *範圍)上的性能。我不會建議使用它。如果你假設已經創建了範圍數組,那麼你最好運行n次迭代的Knuth shuffle,否則就是O(n),否則爲O(n + range)。 – Brian 2013-11-01 16:00:47