3

私は NSDictionaries の mutableArray をソートしようとしています。現在、1 つの objectForKey 値でソートすることでこれを行うことができますが、これに関する問題は、これらの値の多くが同じになる可能性があるため、配列をソートするには他の objectForKey が必要になることです。最初の objectForKey 比較が同じ値を返した場合、どのようにして 2 番目の objectForKey 比較に移動できるかなどを考えていました..

現在、私はこれを行っていますが、これは機能します..しかし、明らかに1つのキーでのみです。

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

NSSortDescriptor2 つのオブジェクトを使用して並べ替えを実行することもできます。

[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 に答える