我正在导入一个包含名字和姓氏列表的txt文件。每个新名称都在它自己的行上,所以我将它们导入NSMutableArray,然后用componentsSeparatedByString:@“\ n”拆分它们。然后我想通过他们的姓氏对名字进行排序。我找到了这个Sort collections,但是我迷失了如何告诉我的数组中的NSStrings有密钥的firstName和lastName。显然我必须制作一个NSDictionary,但你可以做一个for循环,在“(空格)是firstName之前我说任何东西,后面的任何东西都是lastName。”
希望我已经足够清楚,
提前致谢。
编辑:如果改变/帮助,这将全部显示在UITableView中。
答案 0 :(得分:1)
就个人而言,我会创建一个名为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);
}