3

我正在尝试对 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 键对这些值进行排序.. 如果这不起作用,则进入列表钥匙直到它排序..我希望这是有道理的..任何帮助将不胜感激。

4

1 回答 1

5

您在问题中几乎描述了解决方案:“如果描述键相同,则按 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]];
于 2012-08-07T04:09:18.283 回答