2011-09-30 77 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文件,還是原始文件中的新類方法?也許那是我出錯的地方。 –