javascript:从范围中生成2个随机但不同的数字

javascript:从范围中生成2个随机但不同的数字,javascript,random,sampling,Javascript,Random,Sampling,快速问题: 实现这一行python代码(从给定范围生成两个随机但不同的数字)的最佳方法是什么 …用Javascript 提前谢谢 Martin生成一个,然后重复生成第二个,直到它与第一个不一样。它必须运行更长时间的可能性很小,但除非您需要生成数十亿个数字,否则您不会看到任何性能影响。生成一个数字,然后重复生成第二个数字,直到它与第一个数字不一样为止。它必须运行更长时间的可能性很小,但除非您需要生成数十亿个数字,否则您不会看到任何性能损失。以下是我使用splice的尝试: var a = [1,2

快速问题:

实现这一行python代码(从给定范围生成两个随机但不同的数字)的最佳方法是什么

…用Javascript

提前谢谢


Martin生成一个,然后重复生成第二个,直到它与第一个不一样。它必须运行更长时间的可能性很小,但除非您需要生成数十亿个数字,否则您不会看到任何性能影响。

生成一个数字,然后重复生成第二个数字,直到它与第一个数字不一样为止。它必须运行更长时间的可能性很小,但除非您需要生成数十亿个数字,否则您不会看到任何性能损失。

以下是我使用splice的尝试:

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);
函数样本_范围(范围,n){
var样本=[];

对于(var i=0;i,我尝试使用拼接:

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);
函数样本_范围(范围,n){
var样本=[];

对于(var i=0;i如果要生成0到
n
之间的随机数,一种方法是在
0..n
中随机选取
r1
,然后从
0..n-1
中选取
r2
,如果
r2>=r1
如果要生成0到
n
之间的随机数,一种方法是在
0..n
中随机选取编号
r1
,然后从
0..n-1
中选取
r2
,如果
r2>=r1
函数样本(范围,tot),则将1添加到
r2
{
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
如果(tot>范围){ 警报(“无限循环”); 返回[]; } var myRandomNumbers=[]; 对于(var i=0;i
函数样本(范围,tot){
如果(tot>范围){
警报(“无限循环”);
返回[];
}
var myRandomNumbers=[];
对于(var i=0;iPerformance on this O(n*range)。我不建议使用它。如果假设已经创建了range数组,则最好运行n次Knuth shuffle迭代,即O(n),否则为O(n+range)。此O(n*range)上的性能。我不建议您使用它。您最好运行n次Knuth shuffle迭代,如果您假设已经创建了范围数组,则为O(n),否则为O(n+范围)。