重复数组随机播放

时间:2014-12-09 04:32:59

标签: ios

目标:当NSUInteger * current迭代最终索引时,让数组重新洗牌。任何帮助都会很棒。

- (IBAction)buttonPressed:(id)sender {
   [self buttonMechanics];
}

- (void) generateArray {
    NSUInteger count = [box count];
    for (NSUInteger i = 0; i < count; ++i) {
    NSUInteger nElements = count - i;
    NSUInteger n = (arc4random() % nElements) + i;
    [box exchangeObjectAtIndex:i withObjectAtIndex:n];
    }
}



- (void) buttonMechanics {
    if(current + 1 < [box count])
    {
        current++;
        post = [box objectAtIndex: current];
        [showItemLabel setText: post];
    }
}

@end

1 个答案:

答案 0 :(得分:0)

首先,您需要更多描述性的方法名称。 buttonPressed不是一个好名字;将其命名为与按下按钮触发的操作有关,例如shuffleArray。其他的也不具有描述性,尤其是buttonMechanics

其次,要适当地改组数组,请使用Fisher-Yates shuffle之类的内容。它很容易实现。

第三,如果你想多次改组一个数组(使用正确实现的Fisher-Yates不值得),只需对你的shuffle函数进行for循环。

这是一个简单的Objective-C shuffle函数:

NSArray * shuffleCards(NSArray *cards) {
    NSMutableArray *mutableCards = [cards mutableCopy];
    for (NSInteger i = mutableCards.count - 1; i >= 0; i--) {
        NSUInteger randomIndex = arc4random_uniform((u_int32_t)i);
        [mutableCards exchangeObjectAtIndex:i withObjectAtIndex:randomIndex];
    }

    return [mutableCards copy];
}

如果你想多次调用这个函数,只需像这样循环它:

NSArray *cards = @[@1, @2, @3, @4];
for (NSUInteger i = 0; i < 5; i++) {
    cards = shuffleCards(cards);
}