2011-08-05 16 views
2

辞書のキー付きオブジェクトを使用して、nsdictionariesのnsmutablearrayをソートする必要があります。オブジェクトはNSNumberです。どのようにnsmutablearray内の辞書をソートし、最初のオブジェクトが最高のnsnumberであるか?配列内の辞書をソートしますか?

ありがとう! block(あなたが他の道を行くことができますが、これは非常にコンパクトである)で定義されたカスタムコンパレータと

答えて

5

NSComparator mysort = ^(id dict1, id dict2) { 
    NSNumber n1 = [dict1 objectForKey:@"key"]; 
    NSNumber n2 = [dict2 objectForKey:@"key"]; 
    return (NSComparisonResult)[n1 compare:n2]; 
}; 

[yourArray sortUsingComparator:mysort]; 
+0

これは効率的ですが、なぜ2つの辞書(dict1とdict2?)を使用していますか? forループでこのコードをどのように使うべきですか?配列の各nsdictionaryからすべてのnsnumberを取得したい。これはそうするのだろうか? –

+0

カスタムコンパレータの良い点は、それらを使用する必要がないことです。要素のセット全体で順序付けを行うことができる関数を定義すると、Cocoaのソート実装はその関数を使ってソートを自動的に管理します。 'sortUsingComparator:'を呼び出すと、すべてがCocoa自身によって行われます。 – Jack

1

は、このコードは、ビットをオフに思えます。ここには動作するものがあります。

[theMutableArrayThatWillBeSorted sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { 
    NSNumber* n1 = [obj1 objectForKey:@"key"]; 
    NSNumber* n2 = [obj2 objectForKey:@"key"]; 

    return [n1 compare:n2];  
}]; 
関連する問題