0

50 個の配列要素を持つ NSMutableArray があります。繰り返しなしでランダムに生成する必要があります。いくつかのサンプルコードを提案できますか?

4

3 に答える 3

1

メイン配列のローカル mutablearray コピーを作成し、ランダム値を取得した後、ランダム インデックスで使用可能なオブジェクトをローカル配列から削除し、配列カウントが 1 になるまで処理します。

于 2012-07-20T12:05:38.747 に答える
0

数値を生成する必要があると想定しています。これは、N から M 個の乱数を生成するために使用した答えです。乱数を に追加するわけではありませんがNSMutableArray、必要に応じてこのコードを適応させることができると確信しています。

#define M 10
#define N 100    

unsigned char is_used[N] = { 0 }; /* flags */
int in, im;

im = 0;

for (in = N - M; in < N && im < M; ++in) {
  int r = rand() % (in + 1); /* generate a random number 'r' */

  if (is_used[r])
    /* we already have 'r' */
    r = in; /* use 'in' instead of the generated number */

  assert(!is_used[r]);
  vektor[im++] = r + 1; /* +1 since your range begins from 1 */
  is_used[r] = 1;
}

assert(im == M);

上記が機能する理由はすぐにはわかりません。しかし、それは機能します。[1..N] の範囲から正確に M 個の数値が一様分布で選択されます。

大きな N の場合、検索ベースの構造を使用して「既に使用されている」数値を格納できるため、O(M) メモリ要件で優れた O(M log M) アルゴリズムを取得できることに注意してください。

[ソース]

于 2012-07-20T12:04:12.310 に答える
0

これは、1000 未満のランダムな int を取得するサンプルです。

int y =  arc4random() % 1000;

重複しないようにするには、挿入する前に確認してください

于 2012-07-20T12:05:39.420 に答える