2013-03-25 58 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]; 

    }];