我曾认为我已经掌握了它,
void shiftArray(NSMutableArray *mutableArray, NSUInteger shift)
{
for (NSUInteger i = 0; i < [mutableArray count]; i++) {
NSUInteger newIndex = (i + shift) % [mutableArray count];
[mutableArray exchangeObjectAtIndex:i withObjectAtIndex:newIndex];
}
}
当我向右移动一位时,将0,1,2,3,4转换为0,2,3,4,1。
预期结果是4,0,1,2,3
我觉得我可能漏了什么显而易见的东西...
更新:谢谢Matthieu,这是我的函数现在的样子。
void shiftArrayRight(NSMutableArray *mutableArray, NSUInteger shift) {
for (NSUInteger i = shift; i > 0; i--) {
NSObject *obj = [mutableArray lastObject];
[mutableArray insertObject:obj atIndex:0];
[mutableArray removeLastObject];
}
}
我不知道你可以创建一个通用的NSObject并将一些子类放入其中。因为它们都只是指针,所以我想这样做应该没问题,对吧?
很难改变将这些对象视为“物品袋”而不是指向物品袋的指针的习惯。