目标:当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
答案 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);
}