0

重複の可能性:
Objective-C で NSArray をランダム化する正規の方法

次のような配列があるとします。

shuffleArray = [[NSMutableArray alloc] initWithObjects:@"A",@"B",@"C",@"D",@"E", nil];

そして、次のように配列の要素の位置をランダムに変更したい:

shuffleArray = [[NSMutableArray alloc] initWithObjects:@"C",@"A",@"B",@"E",@"D", nil];

どうすればこれを行うことができますか?

4

2 に答える 2

0
-(NSArray *)shuffleme
{

 NSMutableArray *array = [NSMutableArray arrayWithCapacity:[self count]];

 NSMutableArray *array1 = [self mutableCopy];
 while ([array1 count] > 0)
 {
  int temp = arc4random() % [array1 count];
  id objectToMove = [array1 objectAtIndex:temp];
  [array addObject:objectToMove];
  [array1 removeObjectAtIndex:temp];
 }

   [array1 release];
   return array;
}

うまくいけば、これはあなたを助けるでしょう..

于 2012-05-12T06:31:47.050 に答える
0
-(void)changeObjectAtIndex:(int)index1 index2:(int)index2 array:(NSMutableArray *)array
{
     id objectAtIndex1=[array objectAtIndex:index1];
     [array insertObject:[array objectAtIndex:index2] atIndex:index1];
     [array insertObject:id atIndex:index2];
}

これは2つのインデックスでオブジェクトを交換するためのもので、特定のオブジェクトが必要な場所が正確にわかっている場合は、この関数を再帰的にすることができます.しかし、ランダムにしたい場合は、Nitの方法を採用できます.

ランダムに行うこともできます:-

id newObject= [[[yourArray objectAtIndex:index] retain] autorelease];
[yourArray  removeObjectAtIndex:index];
[yourArray  insertObject:object atIndex:yourIndex];

オブジェクトを保持するように注意してください。

于 2012-05-12T06:48:15.693 に答える