使用SubArray键值对对Main NSArray进行排序

时间:2014-10-10 07:27:04

标签: objective-c xcode nsarray nssortdescriptor

我想根据数组self.contacts中的 first_name 对主数组进行排序

用于对数组进行排序的代码

-(void)Sort
{
     NSSortDescriptor *sdName = [[NSSortDescriptor alloc] initWithKey:@"first_name" ascending:YES];
     self.contacts = [NSMutableArray arrayWithArray:[self.contacts sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sdName, nil]]];
}

迈德特

self.contacts = (
        {
            contact = {
                "first_name" = "Test R";
            };

            "last_met" = (
                {
                    "last_met_date" = "2014-10-09";
                }
            );
        },
        {
            contact = {
                "first_name" = "Test K";
            };

            "last_met" = (
                {
                    "last_met_date" = "2014-10-09";

                }
            );
        }
    )

2 个答案:

答案 0 :(得分:1)

查看你的代码看起来你想要对你的联系人数组进行排序,这是一个字典数组,我在这里提供的解决方案就是针对那种情况。

你可以这样做:

NSArray *sortedContactsArray = [self.contacts sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    NSString *first_name1 = [obj1 valueForKeyPath:@"contact.first_name"];
    NSString *first_name2 = [obj2 valueForKeyPath:@"contact.first_name"];

    return [first_name1 compare:first_name2];
}];

请注意,它可能不安全和最佳,但这只是其中一种方法。

答案 1 :(得分:1)

尝试使用此排序描述符:

descriptor = [[NSSortDescriptor alloc] initWithKey:@"contact.first_name" 
                                         ascending:YES];

参数key实际上是关键路径NSDictionary符合KV标准。您可以编写类似:[contacts[0] valueForKeyPath:@"contact.first_name"]

的内容