可能重复:
iphone - nsarray/nsmutablearray - re-arrange in random order
我有一个包含20个对象的NSMutableArray。有没有什么方法可以随意化他们的订单,就像你洗牌一样。 (按顺序我的意思是它们在数组中的索引)
就像我有一个包含的数组:
我怎样才能使订单随机化,以便得到类似的内容:
答案 0 :(得分:16)
以下是一些示例代码: 遍历数组,并随机切换对象的位置。
for (int x = 0; x < [array count]; x++) {
int randInt = (arc4random() % ([array count] - x)) + x;
[array exchangeObjectAtIndex:x withObjectAtIndex:randInt];
}
答案 1 :(得分:4)
@interface NSArray (Shuffling)
- (NSArray *)shuffledArray;
@end
@implementation NSArray (Shuffling)
- (NSArray *)shuffledArray {
NSMutableArray *newArray = [[self mutableCopy] autorelease];
[newArray shuffle];
return newArray;
}
@end
@interface NSMutableArray (Shuffling)
- (void)shuffle;
@end
@implementation NSMutableArray (Shuffling)
- (void)shuffle {
@synchronized(self) {
NSUInteger count = [self count];
if (count == 0) {
return;
}
for (NSUInteger i = 0; i < count; i++) {
NSUInteger j = arc4random() % (count - 1);
if (j != i) {
[self exchangeObjectAtIndex:i withObjectAtIndex:j];
}
}
}
}
@end
但请记住这种改组是merely pseudorandom改组!