2015-08-09 91 views
0

我有一個字典數組。每個字典都有一個鍵爲@「date」的字符串對象。我需要按此日期排序數組,降序。我怎樣才能做到最好的方式?排序NSStrings包含日期

+0

快速問題,陣列中的每個字典是否只有一個鍵值對?如果是這樣,是否有可能只使用單個字典和所有關鍵值對? –

+0

@GavinHope不,它有大約10種不同的元素 – Edward

+0

好的很酷,謝謝。 –

回答

1

如果我理解這個數組的結構,我希望這個答案有幫助! :)

我用這種方法來排序一個數組,其中包含一個數組,該數組持有一個數組,最終持有一個字符串,我想通過排序頂部數組。所以顯然一些簡單的不起作用。但我遇到了這一點:

- (void)sortUsingComparator:(NSComparator)cmptr; 

在你的情況,我希望,這是你想要的使用:

NSMutableArray *arrayItems = [NSMutableArray arrayWithObjects: 
           @{@"date":[NSDate date]}, 
           @{@"date":[NSDate dateWithTimeIntervalSinceNow: 60*60*45]}, 
           @{@"date":[NSDate dateWithTimeIntervalSinceNow: 60*60*25]}, 
           @{@"date":[NSDate date]}, 
           @{@"date":[NSDate dateWithTimeIntervalSinceNow: 60*60*5]}, 
           @{@"date":[NSDate dateWithTimeIntervalSinceNow: 60*60*32]}, 
           @{@"date":[NSDate date]}, 
           @{@"date":[NSDate dateWithTimeIntervalSinceNow: 60*60]}, 
           nil]; 
[arrayItems sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { //obj1 and obj2 are objects in the list of the array. so in your case a list of dictionaries, so obj1 and obj2 are dictionaries, mutable 
    //And now, which is why you would use this block to sort your objects, there you'll access each date, or object, you want to have the 'power' to sort the objects inside the caller, in this case arrayItems 
    NSDate *date1 = [obj1 objectForKey: @"date"]; 
    NSDate *date2 = [obj2 objectForKey: @"date"]; 

    //And now you compare the two of whom is larger 
    return [date1 compare: date2]; 

}]; 
NSLog(@"%@", arrayItems); 

我希望這有助於,或者暗示你的答案:)

+0

謝謝,它幫了很多! – Edward

+0

甜!歡迎您:)很高興有幫助 – ErickES7

1

您可以創建一個NSSortDescriptor,例如:

NSSortDescriptor *sorter = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES]; 
[array sortUsingDescriptors:@[sorter]]; 

這將使用字符串比較來比較你的日期字符串。如果日期字符串格式正確且一致,它應該可以工作。

0

最好的方法是將該字符串格式化爲NSDate對象並使用compare:方法。