2011-11-30 18 views
6

Hihi all、iPhone - NSDictionaryを2つのキーで含むNSMutableArrayのソート

NSMutableArrayにはさまざまなNSDictionaryが含まれています。それぞれのNSDictionaryには、例えばusernameとloginDateの2つのキーと値のペアがあります。

私はこのNSMutableArrayのすべてのNSDictionaryを、loginDateの降順とユーザー名の昇順に基づいてソートする必要があります。

だけ詳細に説明するために:

NSMutableArray (index 0): NSDictionary -> username:"user1", loginDate:20 Dec 2011 
NSMutableArray (index 1): NSDictionary -> username:"user2", loginDate:15 Dec 2011 
NSMutableArray (index 2): NSDictionary -> username:"user3", loginDate:28 Dec 2011 
NSMutableArray (index 3): NSDictionary -> username:"user4", loginDate:28 Dec 2011 

をソートした後、配列の結果は次のようになります。

NSMutableArray (index 0): NSDictionary -> username:"user3", loginDate:28 Dec 2011 
NSMutableArray (index 1): NSDictionary -> username:"user4", loginDate:28 Dec 2011 
NSMutableArray (index 2): NSDictionary -> username:"user1", loginDate:20 Dec 2011 
NSMutableArray (index 3): NSDictionary -> username:"user2", loginDate:15 Dec 2011 

私はこれをどのように達成することができますか? sortUsingComparatorメソッドのいくつかを実行したが、このための方法を見つけることができません。

+0

loginDateは文字列ですか、それともNSDateですか? –

+0

NSDateです。 –

答えて

6

多分このような何か?

[array sortUsingDescriptors: 
[NSArray arrayWithObjects: 
    [[[NSSortDescriptor alloc] 
    initWithKey:@"loginDate" 
    ascending:NO] 
    autorelease], 
    [[[NSSortDescriptor alloc] 
    initWithKey:@"username" 
    ascending:YES] 
    autorelease], 
    nil]]; 

あなたはあなたも行うことができますのiOS 4以降用にビルドした場合:

[array sortUsingDescriptors: 
[NSArray arrayWithObjects: 
    [NSSortDescriptor sortDescriptorWithKey:@"loginDate" ascending:NO], 
    [NSSortDescriptor sortDescriptorWithKey:@"username" ascending:YES], 
    nil]]; 

これは、プロパティキーの値を比較しcompare:メソッドを使用して動作しますが、それはvalueForKey:によって返された値です。 NSDictionaryの場合は、多かれ少なかれ、objectForKey:を呼び出して値を取得します。キー名の前に "@"を付けるなどの特別な表記があります。詳細はDifference valueforKey objectForKeyを参照してください。

+0

アドバイスをいただき、ありがとうございます。確かにもう一度試してみてください:) –

+0

これは各キーの 'compare:'セレクタを使ってソートされます。必要に応じて、別のセレクターを指定するか、ソート記述子ごとにカスタムのコンパレーターを使用することもできます。 –

+0

ありがとうございました!できます! :) –

関連する問題