可能重複:
iphone - nsarray/nsmutablearray - re-arrange in random order如何隨機化一個NSMutableArray?
我有一個包含20個物體一個NSMutableArray。有什麼方法可以像洗牌時那樣隨機化他們的命令? (承我的意思是他們的指數在陣列中)
一樣,如果我有這樣的包含一個數組:
- 蘋果
- 橙色
- 梨
- 香蕉
我怎麼會隨機順序,使我能得到這樣的:
- 橙色
- 蘋果
- 香蕉
- 梨
可能重複:
iphone - nsarray/nsmutablearray - re-arrange in random order如何隨機化一個NSMutableArray?
我有一個包含20個物體一個NSMutableArray。有什麼方法可以像洗牌時那樣隨機化他們的命令? (承我的意思是他們的指數在陣列中)
一樣,如果我有這樣的包含一個數組:
我怎麼會隨機順序,使我能得到這樣的:
以下是一些示例代碼: 遍歷數組,並隨機將對象的位置與另一個對象切換。
for (int x = 0; x < [array count]; x++) {
int randInt = (arc4random() % ([array count] - x)) + x;
[array exchangeObjectAtIndex:x withObjectAtIndex:randInt];
}
@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洗牌!
謝謝你爲這個簡單的代碼。有用。我喜歡你。 – GeneCode 2013-01-04 17:46:48