次のような配列があるとします。
shuffleArray = [[NSMutableArray alloc] initWithObjects:@"A",@"B",@"C",@"D",@"E", nil];
そして、次のように配列の要素の位置をランダムに変更したい:
shuffleArray = [[NSMutableArray alloc] initWithObjects:@"C",@"A",@"B",@"E",@"D", nil];
どうすればこれを行うことができますか?
次のような配列があるとします。
shuffleArray = [[NSMutableArray alloc] initWithObjects:@"A",@"B",@"C",@"D",@"E", nil];
そして、次のように配列の要素の位置をランダムに変更したい:
shuffleArray = [[NSMutableArray alloc] initWithObjects:@"C",@"A",@"B",@"E",@"D", nil];
どうすればこれを行うことができますか?
-(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;
}
うまくいけば、これはあなたを助けるでしょう..
-(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];
オブジェクトを保持するように注意してください。