-1

我编写了一个按姓氏字母顺序对 NSArray 进行排序的代码。我不知道如何让它一直跟随名字。有 strLName(姓氏)和 strFName(名字)。

我需要它看起来像这样(例如):

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

目前它这样做:

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

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

   {
    [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];

}
}
4

1 回答 1

1

我不知道如何让它一直跟随名字。

您几乎已经在代码中得到了正确的答案:

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

您缺少的一点是您可以向数组添加多个排序描述符descriptors,并且它们将按顺序应用,直到可以确定两个项目的排序顺序。因此,如果第一个排序描述符说两个项目匹配,则使用第二个描述符,依此类推。NSArray 的文档页面说:

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

于 2013-03-13T21:09:51.533 回答