将NSDictionary键分配给NSStrings

时间:2011-09-30 01:02:37

标签: objective-c nssortdescriptor

我正在导入一个包含名字和姓氏列表的txt文件。每个新名称都在它自己的行上,所以我将它们导入NSMutableArray,然后用componentsSeparatedByString:@“\ n”拆分它们。然后我想通过他们的姓氏对名字进行排序。我找到了这个Sort collections,但是我迷失了如何告诉我的数组中的NSStrings有密钥的firstName和lastName。显然我必须制作一个NSDictionary,但你可以做一个for循环,在“(空格)是firstName之前我说任何东西,后面的任何东西都是lastName。”

希望我已经足够清楚,

提前致谢。

编辑:如果改变/帮助,这将全部显示在UITableView中。

1 个答案:

答案 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);
}
相关问题