2013-04-28 102 views
-1

PLZ排序字典的指導我如何解決這字典相對於日期

 
dict= 
{ 
"april 2012"=[1,2 ,3 ,4], 
"march 2013"=[3,4,6,7], 
"may 2013"=[6,7,8,3], 
"june 2013"=[6,6,7,8,3], 

} 

如何相對於日期從新到舊排序。

+1

在你的問題中存在一個概念錯誤,在字典中沒有按照定義排序 – tkanzakic 2013-04-28 15:49:02

+0

這是我在這個表單中存儲值的唯一問題,但不需要對此進行排序。 – 2013-04-28 15:51:42

+2

調用[dict allKeys],然後排序產生的數組 – tkanzakic 2013-04-28 15:53:41

回答

1

運行這段代碼

NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 
[dict setObject:@[@6,@6,@7,@8, @3] forKey:@"june 2013"]; 
[dict setObject:@[@1,@2,@3,@4] forKey:@"april 2012"]; 
[dict setObject:@[@6,@7,@8,@3] forKey:@"may 2013"]; 
[dict setObject:@[@3,@4,@6,@7] forKey:@"march 2013"]; 

NSDateFormatter *dateFormatter = [NSDateFormatter new]; 
dateFormatter.dateFormat = @"MMMM yyyy"; 
NSArray *keys = [dict allKeys]; 
NSArray *sortedKeys = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { 
    NSDate *date1 = [dateFormatter dateFromString:obj1]; 
    NSDate *date2 = [dateFormatter dateFromString:obj2]; 

    return [date1 compare:date2]; 
}]; 

NSLog(@"%@", sortedKeys); 

我得到

2013-04-28 18:02:10.322 Test[746:19d03] (
    "april 2012", 
    "march 2013", 
    "may 2013", 
    "june 2013" 
) 

希望它能幫助。

編輯

爲了得到相反的順序排列替換隨返回:

NSComparisonResult result = [date1 compare:date2]; 
    if (result == NSOrderedDescending) { 
     return NSOrderedAscending; 
    } else if (result == NSOrderedAscending) { 
     return NSOrderedDescending; 
    } else { 
     return NSOrderedSame; 
    } 

或者你也可以反轉陣列(How can I reverse a NSArray in Objective-C?)的順序,或只是在相反的順序

迭代
+0

非常感謝您的幫助,您是否會告訴我們如何從晚上十一月份到舊月份進行分類。謝謝。 – 2013-04-28 16:12:25

+0

你的意思是忽略了一年? – tkanzakic 2013-04-28 16:18:58

+0

我只是說,該數組應該是(「2013年6月」,「2013年5月」,「2013年3月」,「2012年4月」) – 2013-04-28 16:22:02