选择要根据百分比运行的函数[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了选择要根据百分比运行的函数[重复]相关的知识,希望对你有一定的参考价值。

我想知道如何根据百分比选择要运行的功能。例如,function1()可能有60%的跑步几率,function2()可能有30%的跑步几率,而function3()可能有10%的跑步几率。

我是用javascript编写的,但是给出的任何代码都不是必需的。

我将希望使用3个以上的功能,并且还能够轻松修改百分比。为了简单起见,我只是把它削减到了3。

我已经考虑过将所有函数放在一个对象中:

var funcs = {
  '1-10':  func3(){},
  '11-40': func2(){},
  '41-100: func1(){}
}

然后我将生成1到100之间的随机数,循环通过对象键并根据随机生成的数字出现的范围运行函数。这对我来说似乎不对,为了调整百分比而涉及太多混乱。另外,我觉得我正在重新发明轮子。

请有人建议一种更易于管理和更优雅的方式来实现这一目标吗?

答案

首先想到的是使用某种加权随机。谷歌搜索带我到这个npm module以及过去的stackoverflow答案:Generate A Weighted Random Number

在这个答案的基础上:

function weightedRand2(spec) {
  var i, sum=0, r=Math.random();
  Object.keys(spec).some(it => {
    sum += parseFloat(it)
    if (r <= sum) {
      spec[it]()
      return true
    }
  })
}

weightedRand2({0.1: function() {console.log(10)}, 0.3:function() {console.log(30)}, 0.6:function() {console.log(60)}});

这使用小数,总和为1,而不是百分比。

以上是关于选择要根据百分比运行的函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使函数重复用户在下拉列表中选择的次数

根据百分比选择数组并对其进行洗牌

有没有办法将2个非常相似的代码片段组合成一个函数并重复?

在tablayout viewpager中运行调整选项卡片段

轻松保存重复多用的代码片段

如何从片段 KOTLIN 中调用意图 [重复]