0

我有一个来自 Sqlite DB & 的数组如下:

(

{ 
 id=1;
duedate = "01-Apr-2013";
},

{
 id=2;
duedate = "01-May-2013";
},

{
id=3;
duedate = "01-Jun-2013";
},

{
 id=4;
duedate = "11-Jul-2013";
}

)

我对数组进行排序的代码

NSSortDescriptor *sortDesc = [[NSSortDescriptor alloc] initWithKey:@"duedate" ascending:YES];
[assessment_list sortUsingDescriptors:[NSArray arrayWithObject:sortDesc]];

但这给出了错误的排序数组,如下所示

(

{ 
 id=1;
duedate = "01-Apr-2013";
},

{
id=3;
duedate = "01-Jun-2013";
},

{
id=2;
duedate = "01-May-2013";
},

{
 id=4;
duedate = "11-Jul-2013";
}

)

我搜索了但我没有发现这个问题

4

4 回答 4

2

您需要将字符串转换为日期以对它们进行排序

   NSArray *datesStringArray = @[@{@"duedate": @"01-Jun-2013"},@{@"duedate": @"01-Dec-2013"},@{@"duedate": @"01-Apr-2013"},@{@"duedate": @"11-Jul-2013"},];

    NSDateFormatter *dateFormatter = [NSDateFormatter new];
    [dateFormatter setDateFormat:@"dd-MMM-yyyy"];

    NSArray *sortedDateStringArray = [datesStringArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

        NSDictionary *dict1 = (NSDictionary *)obj1;
        NSString *string1 = dict1[@"duedate"];
        NSDictionary *dict2 = (NSDictionary *)obj2;
        NSString *string2 = dict2[@"duedate"];

        NSDate *date1 = [dateFormatter dateFromString:string1];
        NSDate *date2 = [dateFormatter dateFromString:string2];

        return [date1 compare:date2];

    }];
于 2013-03-25T09:41:12.877 回答
2

您需要分部分进行。

第 1 部分:将这些字符串转换为NSDate.

NSDateFormatter *df=[NSDateFormatter new];
[df setDateFormat:@"dd-MMM-yyyy"];
NSDate *date=[df dateFromString:string];

第 2 部分:然后使用排序技术/方式(选择器、描述符等)。

于 2013-03-25T09:26:15.463 回答
2

这是因为它是按字母顺序排序的。

对于日期排序,您需要实现类似这样的方法

NSInteger dateSort(id dict1, id dict2, void* context){
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"mm/dd/yyyy"];
NSDate *date1 = [formatter dateFromString:[dict1 objectForKey:@"duedate"]];
NSDate *date2 = [formatter dateFromString:[dict2 objectForKey:@"duedate"]];
    return [[date1 compare:date2];
}

并像这样调用函数

[dateArray sortUsingFunction:dateSort context:NULL];
于 2013-03-25T09:26:28.067 回答
0

您可以将日期转换为时间间隔。

int t = [[NSDate date] timeIntervalSince1970];

并使用 int 值对数组进行排序

于 2013-03-25T09:27:52.030 回答