2016-08-31 11 views
0

から特定のランダムなオブジェクトを取得する可能性を高めるためにどのように、私は次の方法で、配列のランダムな要素得ることができることを知っている:配列一般

var myArray = [x, y, z] 
let myArrayLength = UInt32(myArray.count) 
let myArrayIndex = Int(arc4random_uniform(myArrayLength)) 
let randomElement = myArray[myArrayIndex] 

しかし、どのように、私は可能性を作ることができますyの確率はランダムな要素xとzの確率の2倍はランダムな要素yの可能性の3倍?

UPDATE

NB:[x,x,y,z]:ここで、x、y、zはCGPoint

+4

あなたはおそらく、 "加重ランダム"と呼ばれるものを探しています:http://stackoverflow.com/questions/30309556/generate-random-numbers-with-a-given-distribution –

+0

@TomC私はMartin Rの解を理解していますあなたが提供したリンクの確率を取得しますが、私の場合は 'CGPoint'の配列であるこれらの確率をどのように適用するかはあまり確かではありません。 – Containment

答えて

2

ある簡単な方法は、このようなあなたの配列を書き換えることです。すると、xを得る確率は0.5になり、yの確率は0.25になり、zの確率は0.25になります。可能な限り高い確率でシンボルを繰り返すだけです。例えば、あなたが求めたものには、[x, y, y, z, z, z, z]が良いです。

+0

ありがとうございますが、大規模な配列を持つシナリオをどのように管理できますか。私はこれがより小さい配列のために実装するのが簡単だと思います。 – Containment

+0

このソリューションは簡単な場合に機能します。しかし、大規模な配列であっても、元の配列であるmyArrayを繰り返し処理することができます。各要素については、ネストされたループを使用して別の配列で複数回繰り返します。一般的な方法については、あなたの質問にTom Cのコメントを参照することができます。 – AhmadWabbi

関連する問題