2011-11-30 33 views
6

Hihi全部,iPhone - NSMutableArray包含兩個鍵的NSDictionary的排序

我有一個NSMutableArray包含各種NSDictionary。在每個NSDictionary中,我有兩個鍵值對,例如:username和loginDate。

我需要根據loginDate降序和用戶名升序對此NSMutableArray中的所有NSDictionary進行排序。

只是爲了更詳細說明:

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

這將使用每個鍵的「比較:」選擇器進行排序。如果您願意,您還可以指定其他選擇器或爲每個排序描述符使用自定義比較器。 –

+0

非常感謝!有用! :) –

相關問題