[英]Reverse an Array of String in Objective-C
我想在Objective-C中反转一个字符串数组。
我知道这样做有一个内置方法:
NSArray* reversedArray = [[inputString reverseObjectEnumerator] allObjects];
但我想通过如下编码实现相同的功能,并收到以下错误。
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSMutableArray *inputString = [NSMutableArray arrayWithObjects:@"a", @"b", @"c", @"d", @"e", @"f", @"g", @"h", @"i", nil];
int lenArray= (int)[inputString count];
NSMutableArray *reverseString=[[NSMutableArray alloc]initWithCapacity:lenArray];
for(int i=lenArray-1;i>0;i--)
{
[reverseString insertObject:inputString[i] atIndex:i];
}
return 0;
}
}
由于未捕获的异常“ NSRangeException”而终止应用程序,原因:“-[__ NSArrayM insertObject:atIndex:]:索引8超出了空数组的范围”
[reverseString insertObject:inputString[i] atIndex:i];
是问题-特别是atIndex:i
部分。 您已经创建了具有足够大容量的可变数组,但是该数组仍然为空,因此在此处指定索引并不是您要执行的操作。
相反,只需使用addObject: [reverseString addObject:inputString[i]];
尝试这个:
for (int i = lenArray-1; i >= 0; i--) {
[reverseString addObject:inputString[i]];
}
注意:只需使用addObject:
并将for循环条件更改为i >= 0
,否则将丢失“ a”。
请享用!
这是完整的解决方案:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSMutableArray *inputString = [NSMutableArray arrayWithObjects:@"a", @"b", @"c", @"d", @"e", @"f", @"g", @"h", @"i", nil];
// NSArray* reversedArray = [[inputString reverseObjectEnumerator] allObjects];
int lenArray= (int)[inputString count];
NSMutableArray *reverseString=[[NSMutableArray alloc]initWithCapacity:lenArray];
for (int i = lenArray-1; i >= 0; i--) {
[reverseString addObject:inputString[i]];
}
for(int i=0;i<=lenArray-1;i++)
{
NSLog(@"%@\n", [reverseString objectAtIndex:i]);
}
return 0;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.