Ios 如何对字符串格式进行排序,如“排序”;2013-10-09;

Ios 如何对字符串格式进行排序,如“排序”;2013-10-09;,ios,ios6,nsstring,ios7,Ios,Ios6,Nsstring,Ios7,我有一个数组包含NSDictionary对象,其中一个键是Time,它包含类似“2013-10-09”的时间字符串格式,我需要按时间键对数组进行排序,但我不知道如何按该格式对NSString进行排序。按该格式对日期排序与按字符串排序结果相同。 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd"]; NSMutableArray *

我有一个数组包含NSDictionary对象,其中一个键是Time,它包含类似“2013-10-09”的时间字符串格式,我需要按时间键对数组进行排序,但我不知道如何按该格式对NSString进行排序。

按该格式对日期排序与按字符串排序结果相同。
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];
}
因此:


将为您提供排序数组。

您的问题解决了吗?您不应该使用YYYY-“关于此示例,有两件事需要注意:它使用YYYY指定年份组件。一个常见错误是使用YYYY。YYYY指定日历年,而YYYY指定年份(即“一年中的一周”),在ISO年-周日历中使用。在大多数情况下,yyyy和yyyy产生相同的数字,但它们可能不同。通常您应该使用日历年。“@cirroz尼斯解释谢谢:)
- (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);
}
  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 ]];