Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 生成';n';范围内的唯一随机数_Google Apps Script - Fatal编程技术网

Google apps script 生成';n';范围内的唯一随机数

Google apps script 生成';n';范围内的唯一随机数,google-apps-script,Google Apps Script,我需要生成5个特定范围内的随机数,从1到100,没有重复 A1 = 1(from) A2 = 100(to) A3 = 5 (Required random number) A4,A5,A6,A7,A8 in cell should generate random number 一个简单的方法可以是: 生成100个数字的列表 使用Fisher-Yates算法洗牌列表 以前5个数字为例 有更快的方法,但是对于只有100个整数就可以了 编辑:请尝试以下代码: function shuffleA

我需要生成5个特定范围内的随机数,从1到100,没有重复

A1 = 1(from)
A2 = 100(to)
A3 = 5 (Required random number)
A4,A5,A6,A7,A8 in cell should generate random number
一个简单的方法可以是:

  • 生成100个数字的列表
  • 使用Fisher-Yates算法洗牌列表
  • 以前5个数字为例
有更快的方法,但是对于只有100个整数就可以了

编辑:请尝试以下代码:

function shuffleArray(array) { // from http://stackoverflow.com/a/12646864/5710637
    for (var i = array.length - 1; i > 0; i--) {
        var j = Math.floor(Math.random() * (i + 1));
        var temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
    return array;
}

function Randomnumber() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange("c2:C5");
  var min = sheet.getRange("A1").getValue();
  var max = sheet.getRange("A2").getValue();
  var numbers = []
  for (var i = min; i <= max; i++) {
    numbers.push(i);
  }
  shuffleArray(numbers)
  var counter = 0;
  for (var x = 1; x <= range.getWidth(); x++) {
    for (var y = 1; y <= range.getHeight(); y++) {
      range.getCell(y, x).setValue(numbers[counter]);
      counter++;
    }
  }
};
函数shufflarray(数组){//fromhttp://stackoverflow.com/a/12646864/5710637
对于(var i=array.length-1;i>0;i--){
var j=Math.floor(Math.random()*(i+1));
var-temp=数组[i];
数组[i]=数组[j];
数组[j]=温度;
}
返回数组;
}
函数Randomnumber(){
var sheet=SpreadsheetApp.getActiveSheet();
var范围=sheet.getRange(“c2:C5”);
var min=sheet.getRange(“A1”).getValue();
var max=sheet.getRange(“A2”).getValue();
变量数=[]

对于fafl指出的(var i=min;i),您可以使用列表

  • 根据范围生成列表
  • 一个接一个地随机弹出n个数字
  • 将弹出的数字写入工作表
这里有一个例子

/*Note: The Code does not have validations like the random number needed should be less
than the range etc. You  should take care of such issues and improvise the code for the
same.
Rest of the code is optimized and makes a single read and write from Spread Making it
run fast*/
function myFunction() {
  //var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ss = SpreadsheetApp.openById("1_xoBxknhDm1pM3MBw0Jbat3BTV4HXep7nZlOPw4tEWg");
  var sheet = ss.getSheets()[0];
  var values = sheet.getRange(1, 2, 3, 1).getValues();
  var nRandomNumbers = getNRandomNumbers(values[0][0], values[1][0], values[2][0]);
  sheet.getRange(4,2,values[2][0],1).setValues(nRandomNumbers);
}
function getRandomNumber(min, max) {
  return Math.random() * (max - min) + min;
}
function getNRandomNumbers(from, to, n){
  var listNumbers = [];
  var nRandomNumbers = [];
  for(var i = from; i <= to; i++) {
    listNumbers.push(i);
  }
  for(var i = 0; i < n; i++) {
    var index = getRandomNumber(0, listNumbers.length);
    nRandomNumbers.push([listNumbers[parseInt(index)]]);
    listNumbers.splice(index, 1);
  }
  return nRandomNumbers;
}
/*注意:代码没有验证,比如所需的随机数应该更少
您应该注意这些问题,并为
一样。
其余的代码都经过了优化,只需一次读写就可以了
快跑*/
函数myFunction(){
//var ss=SpreadsheetApp.getActiveSpreadsheet();
var ss=SpreadsheetApp.openById(“1_xoBxknhDm1pM3MBw0Jbat3BTV4HXep7nZlOPw4tEWg”);
var sheet=ss.getSheets()[0];
var values=sheet.getRange(1,2,3,1).getValues();
var nRandomNumbers=getNRandomNumbers(值[0][0],值[1][0],值[2][0]);
sheet.getRange(4,2,值[2][0],1).setValues(nRandomNumber);
}
函数getRandomNumber(最小值、最大值){
返回Math.random()*(max-min)+min;
}
函数GetnRandomNumber(从、到、n){
var-listNumbers=[];
var nRandomNumbers=[];

对于(var i=from;我请用电子表格举例,这样我就能很好地理解。函数Randomnumber(){var sheet=SpreadsheetApp.getActiveSheet();var range=sheet.getRange(“c2:C5”);var min=sheet.getRange(“A1”).getValue();var max=sheet.getRange(“A2”).getValue();例如(var x=1;x感谢您采取主动…目前我使用下面的脚本,工作正常,但随机数重复出现,并且在指定范围内。但是,我需要在单元格A4到A8.function Randomnumber()下指定5个随机数,而不是指定范围。{var sheet=SpreadsheetApp.getActiveSheet();var范围=sheet.getRange(“c2:C5”);var最小值=sheet.getRange(“A1”).getValue();var最大值=sheet.getRange(“A2”).getValue();用于(var x=1;x@NagarajShet:如果该代码与您的问题相关,请将其添加到您的问题中,以防止其被搁置。由于过于简短/宽泛,该代码已经有两次接近票数。如果您不介意,可以共享该电子表格。我无法运行script@Nagaraj如果我在记事本上写了这个代码,我会稍微编辑一下d添加更多说明。希望有帮助。我到家后会链接一个正在工作的应用程序脚本。现在我不能。这是电子表格链接。请尝试新代码。我误解了工作表格式。刚刚编辑了代码。@halfer实际上我花了1小时在没有签名的情况下打开了链接,但无法理解为什么无法打开。我已经选择了ted网络上的任何人都可以看到共享选项中的链接。