2011-09-30 69 views
0

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

希望我已经足够清晰,提前

感谢。

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

回答

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); 
} 
+0

感谢您的答复!尽管如此,在Name类中,有几个问题的属性是指NSString或id为firstName和lastName。另外,它表示NSString可能不会响应objectAtIndex。 tempArray会进去吗?对不起,我在Obj-C仍然很新。 –

+0

你说得对。我更新了代码。 – sosborn

+0

我没有得到任何更多的错误,但是当我NSLOG namesList,我得到这个:'“<名称:0x4b420d0>”,“<名称:0x4b983c0>”,“<名称:0x4b98430>”,另外,当我创建了新的简单类,应该是它自己的@property和@synthesize文件,还是原始文件中的新类方法?也许那是我出错的地方。 –