2013-03-25 59 views
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"; 
} 

) 

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

回答

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]; 
+0

我应该在的地方string1'&'字符串2的'写'?我的阵列数是4. – user1673099 2013-03-25 09:34:37

+0

现在检查,我已编辑,以适应您的答案 – DivineDesert 2013-03-25 09:36:02

+0

返回[日期2比较:日期1]得到它降序 – DivineDesert 2013-03-25 09:48:00

2

你需要做的是在部分。

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

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

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

0

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

int t = [[NSDate date] timeIntervalSince1970]; 

,并像数组int类型

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]; 

    }];