簡単な質問:
この Python コード行を実装するための最良の方法は何ですか (指定された範囲から 2 つのランダムだが異なる数値を生成します)...
random.sample(xrange(10), 2)
...Javascriptで?
前もって感謝します!
マーティン
簡単な質問:
この Python コード行を実装するための最良の方法は何ですか (指定された範囲から 2 つのランダムだが異なる数値を生成します)...
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
、1 つの方法は、 でランダムに数値r1
を0..n
選択r2
してから選択し、 if0..n-1
に 1 を追加することです。r2
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
1 つを生成してから、1 つ目と同じでなくなるまで 2 つ目を繰り返し生成します。実行時間が長くなる可能性はわずかですが、何十億もの数値を生成する必要がない限り、パフォーマンスが低下することはありません。