按字母顺序排列NSArray

问题描述:

我写了一个按姓氏按字母顺序排列NSArray的代码。我无法想象如何使它一直遵循名字。有strLName(这是姓)和strFName(这是第一个名字按字母顺序排列NSArray

我需要它看起来像这样(作为一个例子)。

史蒂夫·杰克逊 蒂姆·杰克逊 艾伦·琼斯 黛安琼斯

目前,它这样做:

蒂姆·杰克逊 史蒂夫·杰克逊 黛安·杰克逊 艾伦杰克逊

这是到目前为止我的代码:

{ 
    [super viewDidLoad]; 

NSArray *arr = [[NSArray alloc] initWithObjects:@"a", @"b", @"c", @"d", @"e", @"f", @"g", @"h", @"i", @"j", @"k", @"l", @"m", @"n", @"o", @"p", @"q", @"r", @"s", @"t", @"u", @"v", @"w", @"x", @"y", nil]; 

mArrSearched = [[NSMutableArray alloc] init]; 

for (int i=0; i<[AppDelegate sharedAppDelegate].arrGuests.count; i++) 

{ President *pres = [[AppDelegate sharedAppDelegate].arrGuests objectAtIndex:i]; 

    NSString *strLName = pres.strLName; 

    NSString *strAlpha = [NSString stringWithFormat:@"%c", [strLName characterAtIndex:0]]; 

    NSString *str = [arr objectAtIndex:self.nIdx-1]; 

    NSLog(@"LastName=%@, Alpha=%@, selectedStr=%@", strLName, strAlpha, str); 

    if ([strAlpha isEqualToString:[str uppercaseString]] || [strAlpha isEqualToString:str]) 
    { 
     NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithInt:i], @"Index", strLName, @"Name", nil]; 

     [mArrSearched addObject:dict]; 
    } 
} 
[self sortByAlpha]; 

[tblView reloadData]; 
} 


- (void) sortByAlpha { 

NSSortDescriptor * frequencyDescriptor = [[NSSortDescriptor alloc] initWithKey:@"Name" ascending:YES]; 

id obj; 

if (mArrSearched.count > 0) 
{ 
    NSEnumerator * enumerator = [mArrSearched objectEnumerator]; 

    while ((obj = [enumerator nextObject])) NSLog(@"%@", obj); 

    NSArray * descriptors = [NSArray arrayWithObjects:frequencyDescriptor, nil]; 

    NSArray * sortedArray = [mArrSearched sortedArrayUsingDescriptors:descriptors]; 

    NSLog(@"\nSorted ..."); 

    enumerator = [sortedArray objectEnumerator]; 

    while ((obj = [enumerator nextObject])) NSLog(@"%@", obj); 

    NSLog(@"%d", [[[mArrSearched objectAtIndex:0] objectForKey:@"Name"] intValue]); 

    mArrSearched = [sortedArray mutableCopy]; 

} 
} 

我找不出如何使它一路跟随到的第一个名字。

你已经基本得到了答案就在你的代码:

NSArray * descriptors = [NSArray arrayWithObjects:frequencyDescriptor, nil]; 
NSArray * sortedArray = [mArrSearched sortedArrayUsingDescriptors:descriptors]; 

点你丢失的是,你可以添加多个排序描述符数组descriptors,他们将被应用直到可以确定两个项目的排序顺序。因此,如果第一个排序描述符表示两个项目匹配,则使用第二个描述符,依此类推。 NSArray的文档页面表示:

第一描述符指定在 使用排序接收阵列的内容的主键路径。任何后续描述符都是 ,用于进一步优化具有重复值的对象的排序。有关其他信息,请参阅 NSSortDescriptor。