1

この配列があるとしましょう:

[{name: "A", works: true}, {name: "B", works: true}, {name: "C", works: false}]

80%この配列の 1 つの要素を選択する関数が必要です。たとえば、機能する要素 ( ) を取得する確率としましょうworks: true

どうすればこれをエレガントに行うことができますか? 疑似コードまたは任意の言語のコードをいただければ幸いです。

underscore.jsjsを使用している場合は、必要に応じて使用できます)

4

2 に答える 2

3

あなたの状況では、最初にコインを投げて、機能する要素を選択するか、それ以下を選択するかを決定します。Math.random()これはで値を返すJS で行うことができます[0,1]

value = Math.random() <= 0.8

80% の確率で値を true に設定します。この時点で、必要な要素の種類がすでにわかっているので、ランダムな要素を選択して、機能するかどうかを確認できます。正しいタイプの場合はそれを返し、そうでない場合は別のランダムなタイプを選択します。

リストがかなり長い場合、これには多くの選択が必要になる場合があります。この場合、リストを分割して 2 つのリスト (作業中のものと作業中のものではない) を保持できます。

于 2012-10-28T12:46:18.983 に答える
1

関数:

function chooser(an_array) {
    var node_found = false;
    var works = Math.random() <= .80;
    while(node_found === false) {
        var node = an_array[Math.floor(Math.random()*an_array.length)];
        if(node.works === works) node_found = true;
    }
    return node;
}

編集:テストする必要があると判断しました。上記の関数を 10,000 回実行すると、結果は良好です: http://jsfiddle.net/YyZfA/4/

于 2012-10-28T13:03:11.477 に答える