2013-10-22 58 views
2

我有一個數組包含NSDictionary對象,一個關鍵是時間,其中包含像「2013-10-09」時間字符串格式,我需要排序數組的時間鍵,但我不知道如何用該格式對NSString進行排序。如何排序字符串格式,如「2013-10-09」

+0

http://stackoverflow.com/questions/16208586/ios-sort-an-array-of-time-strings和http://stackoverflow.com/questions/1132806/sort-nsarray-of-date-strings -or-objects/1134126 – iPatel

+0

就是你的問題解決了 – Rajneesh071

回答

0
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd"]; 


NSMutableArray *dates = [NSMutableArray arrayWithCapacity:datesAry.count]; 
for (NSString *dateString in dates) 
{ 
    NSDate *date = [dateFormatter dateFromString:timeString]; 
    [dates addObject:date]; 
} 

[dates sortUsingSelector:@selector(compare:)]; 

NSMutableArray *sortedDates= [NSMutableArray arrayWithCapacity:dates.count]; 
for (NSDate *date in dates) 
{ 
    NSString *dateString = [dateFormatter stringFromDate:date]; 
    [sortedDates addObject: dateString]; 
} 
+2

你不應該使用YYYY - 「這個例子有兩點需要注意: 它使用yyyy指定年份組件,常見的錯誤是使用YYYY。 yyyy指定日曆年,而YYYY指定ISO年份周曆中使用的年份(「年份周」)。在大多數情況下,yyyy和YYYY產生相同的數字,但它們可能不同。日曆年「。 – adnako

+0

@cirroz很好的解釋謝謝:) – Rajneesh071

0
- (void)testSortTimeAsString { 
    NSDictionary *dict1 = @{@"key" : @"none", @"Time" : @"2013-10-01", @"optional" : @"---"}; 
    NSDictionary *dict2 = @{@"key" : @"none", @"Time" : @"2012-12-21", @"optional" : @"---"}; 
    NSDictionary *dict3 = @{@"key" : @"none", @"Time" : @"2013-02-10", @"optional" : @"---"}; 
    NSDictionary *dict4 = @{@"key" : @"none", @"Time" : @"2013-11-25", @"optional" : @"---"}; 
    NSDictionary *dict5 = @{@"key" : @"none", @"Time" : @"2013-06-15", @"optional" : @"---"}; 

    NSArray *array = @[dict1, dict2, dict3, dict4, dict5]; 

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    dateFormatter.dateFormat = @"yyyy-MM-dd"; 

    NSArray *sorted = [array sortedArrayWithOptions:0 usingComparator:^(id obj1, id obj2) { 
     NSString *stringDate1 = obj1[@"Time"]; 
     NSString *stringDate2 = obj2[@"Time"]; 

     NSDate *date1 = [dateFormatter dateFromString:stringDate1]; 
     NSDate *date2 = [dateFormatter dateFromString:stringDate2]; 

     NSComparisonResult result = [date1 compare:date2]; 
     return result; 
    }]; 

    NSLog(@"Sorted array: \n%@", sorted); 
} 
0

與該格式排序日期有相同的結果,他們的排序爲字符串。 所以:

NSArray *unordered = @[ 
         @{ @"Time": @"2001-01-01", @"Place" : @"Somewhere" }, 
         @{ @"Time": @"1999-01-01", @"Place" : @"Elsewhere" }, 
         @{ @"Time": @"1999-02-01", @"Place" : @"Nowhere" } 
         ]; 
    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"Time" ascending:YES selector:@selector(compare:)]; 
    NSArray *ordered = [unordered sortedArrayUsingDescriptors:@[ sortDescriptor ]]; 

會給你排序的數組。