0

我想从三个列表中随机选择一个项目,其中每个列表代表不同的选择概率。

我有三个列表(也可以是 3 个数组):高、中和低“优先级”。

我想从这三个列表中优先选择一项

例如,从高 70% 的机会,从 20% 的中,从低的 10%

但是,某些列表可能为空(并非全部)

至少在其中一个列表中有一项

我正在寻找可以做到的算法(任何语言,但更喜欢 C# Java Python)

我尝试了以下代码(Python),但由于空条件有时没有选择任何项目,即使有一个项目,它也无法完成这项工作。

        x =  random.randint(1,100)
        if x  < 71 and highChance != []:     
             return random.choice(highChance)
        elif x >=71 and x < 91 and midChance != []:
            return random.choice(midChance)
        elif lowChance != []:
            return random.choice(lowChance)
4

1 回答 1

0
int[] high = new int[] { 0, 1, 2, 3 };
int[] mid = new int[] { 0, 1 };
int[] low = new int[] { };

int[][] arr = new int[3][];
arr[0] = high.Length != 0? high: mid.Length != 0? mid: low;
arr[1] = mid.Length != 0 ? mid : arr[0];
arr[2] = low.Length != 0 ? low : arr[0];

Random rnd = new Random(0);
int n = rnd.Next(10);
int k = (n < 7) ? 0 : (n < 9) ? 1 : 2;
int result = arr[k][rnd.Next(arr[k].Length)];
于 2014-08-10T02:24:04.523 回答