就我个人而言,我会创建一个名为Name的简单类,它具有firstName属性和lastName属性。然后,您可以遍历数组并创建您的Name实例,将它们添加到NSMutableArray中,然后对数组进行排序。如果你想要的话,你可以去字典路线。
下面是一个例子:
NSMutableArray *namesList = [NSMutableArray arrayWithCapacity:0];
for (NSString *name in originalArray) {
NSArray *tempArray = [name componentsSeparatedByString:@" "];
Name *newNameInstance = [[Name alloc] init];
newNameInstance.firstName = [tempArray objectAtIndex:0];
newNameInstance.lastName = [tempArray objectAtIndex:1];
[namesList addObject:newNameInstance];
}
NSSortDescriptor *sortDescriptor;
sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"lastName"
ascending:YES] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray;
sortedArray = [namesList sortedArrayUsingDescriptors:sortDescriptors];
此代码还没有得到遏制,但它应该工作。我没有关心内存管理,请注意这一点。
更新 对不起,应该是[tempArray objectAtIndex:0]。修正它上面。
由于firstName和lastName是字符串,所以它们应该声明为NSString。尽量不要使用id作为属性,除非你有一个非常好的理由。
更新2 如果您要检查的值做到这一点:
for (Name *name in sortedArray) {
NSLog(@"%@", name.firstname);
NSLog(@"%@", name.lastName);
}
感谢您的答复!尽管如此,在Name类中,有几个问题的属性是指NSString或id为firstName和lastName。另外,它表示NSString可能不会响应objectAtIndex。 tempArray会进去吗?对不起,我在Obj-C仍然很新。 –
你说得对。我更新了代码。 – sosborn
我没有得到任何更多的错误,但是当我NSLOG namesList,我得到这个:'“<名称:0x4b420d0>”,“<名称:0x4b983c0>”,“<名称:0x4b98430>”,另外,当我创建了新的简单类,应该是它自己的@property和@synthesize文件,还是原始文件中的新类方法?也许那是我出错的地方。 –