Не существует канонического способа без создания категории на NSArray
(т.е. есть метод экземпляра, например arrayWithRandomizedIndices
) или NSMutableArray
(т.е. есть метод, подобный randomizeIndices
).
Вот пример из моей библиотеки, часть категории на NSMutableArray
. Он будет случайным образом переупорядочивать массив, а не перемешивать несколько записей.
- (void) randomizeIndices
{
if (self == nil || [self count] <= 1)
{
return;
}
int count = [self count];
NSMutableArray* copySelf = [NSMutableArray arrayWithArray:self];
NSMutableArray* mutableResultArray = [NSMutableArray alloc];
mutableResultArray = [mutableResultArray initWithCapacity:count];
[mutableResultArray autorelease];
int objectsMovedCount = 0;
for (int i = 0; i < count; i++)
{
int index = rand() % (count - objectsMovedCount);
id anObject = [copySelf objectAtIndex:index];
[mutableResultArray addObject:anObject];
[copySelf removeObjectAtIndex:index];
objectsMovedCount++;
}
[self setArray:mutableResultArray];
}
Вызовите srand(time(0));
или что-то подобное перед вызовом этого метода или в начале метода.