【问题标题】:In Google Sheets how can I randomize the order of a set of values?在 Google 表格中,如何随机化一组值的顺序?
【发布时间】:2021-05-28 21:45:03
【问题描述】:

也许我在搜索解决方案时遗漏了一个关键字,但我没有找到我要找的东西。 在 Google 表格中,我想获取一组数字并随机重新排序。例如,从集合 [1,2,3,4] 开始,然后返回 [4,2,1,3]。 有什么想法可以实现这个目标吗?

我想要实现的整个过程是这样的: 我有一组 4 个字段。他们的总和是固定的。我想为他们分配随机值。 所以,我正在考虑迭代这个过程:

  • 创建一个介于 0 和最大可能值之间的随机整数(在第一次迭代中它是固定总和)
  • 新的最大值是上一个最大值减去新的随机数
  • 检查新的最大值是否为零。
    • 如果不是:
      • 返回到第一步并重复 - 这样一直持续到有四个值
      • 如果需要,应增加第 4 个值,使总和与固定总和相匹配。
    • 否则,继续。
  • 随机化 4 个值的顺序。
  • 将值分配给 4 个字段。

【问题讨论】:

    标签: google-sheets random shuffle


    【解决方案1】:

    尝试:

    =INDEX(SORT({{1; 2; 3; 4}, RANDARRAY(4, 1)}, 2, ),, 1)
    

    或:

    =INDEX(SORT({ROW(1:4), RANDARRAY(4, 1)}, 2, ),, 1)
    

    【讨论】:

    • 谢谢!我使用了第一个选项并添加了一个 TRANSPOSE 函数,因为我需要它作为一行(:
    【解决方案2】:

    这里还有几个应用脚本示例

    function DiceRolls(nNumRolls) {
    var anRolls = [];
    nNumRolls = DefaultTo(nNumRolls, 1000)
    
      for (var i = 1;i <= nNumRolls; i++) {
        anRolls.push(parseInt((Math.random() * 6))+1);
      }
    return anRolls;
    }
    
    function CoinFlips(nNumFlips) {
    var anFlips = [];
    nNumFlips = DefaultTo(nNumFlips, 1000)
      for (var i = 1;i <= nNumFlips; i++) {
        anFlips.push(getRndInteger(1,2));
      }
    return anFlips;
    }
    
    function getRndInteger(min, max) {
        return Math.floor(Math.random() * (max - min + 1) ) + min;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      • 2013-02-04
      • 2020-01-24
      • 2020-06-06
      • 2011-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多