如何随机化NSMutableArray?

时间:2011-06-06 16:52:02

标签: objective-c nsmutablearray shuffle

  

可能重复:
  iphone - nsarray/nsmutablearray - re-arrange in random order

我有一个包含20个对象的NSMutableArray。有没有什么方法可以随意化他们的订单,就像你洗牌一样。 (按顺序我的意思是它们在数组中的索引)

就像我有一个包含的数组:

  1. 苹果
  2. 香蕉
  3. 我怎样才能使订单随机化,以便得到类似的内容:

    1. 苹果
    2. 香蕉

2 个答案:

答案 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改组