Iphone 在objective-c中反转数组中的元素
是不是有什么我不知道的。我最初想在.m文件中这样做。(我看到一些关于使用N分子的代码,但我不太理解,所以我认为对于我的需要,这就足够了) 所以我想这样做:Iphone 在objective-c中反转数组中的元素,iphone,objective-c,nsarray,Iphone,Objective C,Nsarray,是不是有什么我不知道的。我最初想在.m文件中这样做。(我看到一些关于使用N分子的代码,但我不太理解,所以我认为对于我的需要,这就足够了) 所以我想这样做: - (NSArray *)reverseArray:(NSMutableArray *)array { NSMutableArray *anArray = [[NSMutableArray alloc] initWithCapacity:[array count]]; for (NSUInteger i = [array co
- (NSArray *)reverseArray:(NSMutableArray *)array {
NSMutableArray *anArray = [[NSMutableArray alloc] initWithCapacity:[array count]];
for (NSUInteger i = [array count] - 1; i >= 0 ; i--) {
[anArray addObject:[array objectAtIndex:i]];
}
return anArray;
}
这给了我一个编译器警告:i>=0是NSUInteger的设计目标,或者是沿着这些思路设计的。当我运行该程序时,它也会崩溃并访问一些超大数量的数据。我不太清楚为什么。我可以在任何地方用1来抵消I,然后这样做,结果是:
- (NSArray *)reverseArray:(NSMutableArray *)array {
NSMutableArray *anArray = [[NSMutableArray alloc] initWithCapacity:[array count]];
for (NSUInteger i = [array count]; (i) ; i--) {
[anArray addObject:[array objectAtIndex:i - 1]];
}
return anArray;
}
我只是不明白为什么第一种方法不起作用。任何帮助都将不胜感激。谢谢 无符号整数始终>=0。因此,您的第一个循环永远不会终止,这最终导致它尝试访问
objectAtIndex:(NSUInteger)-1
,这实际上是一个非常大的正索引,导致崩溃
幸运的是,您似乎已经找到了解决问题的方法。干得好
请注意,关于这一点,Objective-C没有任何特定的内容;程序员通常会在基本上所有适当的低级语言中对无符号整数犯同样的错误。无符号整数总是>=0。因此,您的第一个循环永远不会终止,这最终导致它尝试访问
objectAtIndex:(NSUInteger)-1
,这实际上是一个非常大的正索引,导致崩溃
幸运的是,您似乎已经找到了解决问题的方法。干得好
请注意,关于这一点,Objective-C没有任何特定的内容;程序员通常会在基本上所有适当的低级语言中对无符号整数犯同样的错误。NSUInteger是“无符号的”,这意味着它不能有-符号表示负数。
在你的代码中
NSUInteger i = [array count] - 1; i >= 0 ; i--
这最终将等于-1,因此是错误的。
尝试删除=以获得类似的内容
NSUInteger i = [array count] - 1; i > 0 ; i--
整数是“无符号的”,这意味着它不能有-符号表示负数。
在你的代码中
NSUInteger i = [array count] - 1; i >= 0 ; i--
这最终将等于-1,因此是错误的。
尝试删除=以获得类似的内容
NSUInteger i = [array count] - 1; i > 0 ; i--
NSUInteger
是一个无符号
整数。因此,如果nsu=0
并且如果计算u-1
,它不会变成-1
。相反,它会下溢,成为一个超级巨大的数字
将代码更改为
for (NSInteger i = [array count] - 1; i >= 0 ; i--) {
应该解决这个问题
请注意,您实际上不必反转数组。for循环
for(a in array){
... do something with a ...
}
按正向顺序枚举元素,以及
for(a in [array reverseObjectEnumerator]){
... do something with a ...
}
按相反顺序枚举元素
NSUInteger
是一个无符号
整数。因此,如果nsu=0
并且如果计算u-1
,它不会变成-1
。相反,它会下溢,成为一个超级巨大的数字
将代码更改为
for (NSInteger i = [array count] - 1; i >= 0 ; i--) {
应该解决这个问题
请注意,您实际上不必反转数组。for循环
for(a in array){
... do something with a ...
}
按正向顺序枚举元素,以及
for(a in [array reverseObjectEnumerator]){
... do something with a ...
}
按相反顺序枚举元素 这是一个很好的自包含宏:这是一个很好的自包含宏: