0

3 つのリストから 1 つの項目をランダムに選択したいと考えています。各リストは異なる選択確率を表しています。

高、中、低の「優先度」の 3 つのリスト (3 つの配列にすることもできます) があります。

この3つのリストから優先確率で1つ選びたい

例: 高から 70% の確率で中盤から 20%、低から 10%

ただし、リストの一部は空である可能性があります (すべてではない)。

いずれかのリスト内に少なくとも 1 つの項目がある

それを行うアルゴリズム(任意の言語ですが、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 に答える