我正在尝试对NSDictionaries的mutableArray进行排序,目前我可以通过对一个objectForKey值进行排序来做到这一点,但是问题是这些值中的很多可以相同,因此我需要另一个objectForKey来对数组进行排序。我想知道,如果第一个objectForKey比较返回一个相同的值,然后又如何移动到第二个objectForKey比较,依此类推。

目前,我正在执行此操作,该方法可以正常工作,但是显然只能使用一个键。

[dataArrayOfDictionaries sortUsingComparator:^ NSComparisonResult(NSDictionary *d1, NSDictionary *d2)
    {
        NSString *n1 = [d1 objectForKey:@"DESCRIPTION"];
        NSString *n2 = [d2 objectForKey:@"DESCRIPTION"];
        return [n1 localizedCompare:n2];
    } ];

在调查中,我已经尝试过-
[dataArrayOfDictionaries sortUsingComparator:^ NSComparisonResult(NSDictionary *d1, NSDictionary *d2)
{
    NSString *n1 = [d1 objectForKey:@"DESCRIPTION"];
    NSString *n2 = [d2 objectForKey:@"DESCRIPTION"];
    return [n1 localizedCompare:n2];
    n1 = [d1 objectForKey:@"ID"];
    n2 = [d2 objectForKey:@"ID"];
    return [n1 localizedCompare:n2];

} ];

但是,这是行不通的,因为它对描述进行排序,然后完全根据ID重新排序,我想要它,如果描述键相同,然后按ID密钥对这些值进行排序..如果不起作用,则在列表的下方直到排序的键..我希望这是合理的..任何帮助将不胜感激。

最佳答案

您几乎在问题中描述了解决方案:“如果Description键相同,然后按ID键对这些值进行排序”。您可以将英语句子直接翻译为代码:

[dataArrayOfDictionaries sortUsingComparator:^ NSComparisonResult(NSDictionary *d1, NSDictionary *d2) {
    NSString *n1 = [d1 objectForKey:@"DESCRIPTION"];
    NSString *n2 = [d2 objectForKey:@"DESCRIPTION"];
    NSComparisonResult result = [n1 localizedCompare:n2];
    if (result == NSOrderedSame) {
        n1 = [d1 objectForKey:@"ID"];
        n2 = [d2 objectForKey:@"ID"];
        result = [n1 localizedCompare:n2];
    }
    return result;
}];

您还可以使用两个NSSortDescriptor对象执行排序:
[dataArrayOfDictionaries sortUsingDescriptors:[NSArray arrayWithObjects:
    [NSSortDescriptor sortDescriptorWithKey:@"DESCRIPTION" ascending:YES
        selector:@selector(localizedCompare:)],
    [NSSortDescriptor sortDescriptorWithKey:@"ID" ascending:YES
        selector:@selector(localizedCompare:)],
    nil]];

10-04 23:07