如何排序日期?

时间:2015-03-02 10:19:40

标签: ios objective-c iphone

我有阵列赞:

<__NSArrayM 0x79f3a4a0>(
{
    "act_date" = "02/03/2015";
    "act_id" = 3;
    "act_name" = test2;
},
{
    "act_date" = "03/03/2015";
    "act_id" = 4;
    "act_name" = test3;
},
{
    "act_date" = "01/03/2015";
    "act_id" = 5;
    "act_name" = test1;
}
)

我想用日期对数组进行排序。 我尝试了这种方法:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MM/dd/yyyy"];
NSMutableArray *tempArray = [NSMutableArray array];

for (NSString *dateString in tblList)
{
    NSDate *date = [formatter dateFromString:[dateString valueForKey:@"act_date"]];
    [tempArray addObject:date];
}

   [tempArray sortUsingComparator:^NSComparisonResult(NSDate *date1, NSDate *date2) {
        // return date2 compare date1 for descending. Or reverse the call for ascending.
        return [date2 compare:date1];
    }];

但它只返回带有日期的数组,如何添加带有排序日期数组的所有数据?

5 个答案:

答案 0 :(得分:1)

您正在从阵列中取出日期,不需要,您仍然可以使用下面的方法对字典数组进行排序。

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"act_date" ascending:YES];
NSArray *sortedArray = [tblList sortedArrayUsingDescriptors:@[sortDescriptor]];

答案 1 :(得分:1)

如果您需要在比较前将"act_date"的值转换为正确的NSDate,我会这样做:

NSDateFormatter *_dateFormatter = [[NSDateFormatter alloc] init];
[_dateFormatter setDateFormat:@"MM/dd/yyyy"];

NSArray *_yourOriginalArray = // ...
NSArray *_sortedArray = [_yourOriginalArray sortedArrayUsingComparator:^NSComparisonResult(NSDictionary * obj1, NSDictionary * obj2) {
    return [[_dateFormatter dateFromString:[obj2 valueForKey:@"act_date"]] compare:[_dateFormatter dateFromString:[obj1 valueForKey:@"act_date"]]];
}];

然后_sortedArray将对项目进行排序。

答案 2 :(得分:0)

您可以使用简单的NSSortDescriptor

NSSortDescriptor * sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"act_date" ascending:YES selector:@selector(compare:)];
array = [array sortedArrayUsingDescriptors:@[sortDescriptor]];

如果需要,可以添加更多描述符以进行排序,例如act_id。优先级由您传递给方法-sortUsingDescriptor的数组中的排序描述符的设置者设置 的 [编辑]
正如holex指出的,act_date是一个字符串,应该使用NSdate将其转换为NSDateFormatter。或者您只需对字符串进行排序。

答案 3 :(得分:0)

我正在使用日期 -

对字典数组进行排序
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"act_date" ascending:NO];
[mArrTimeline sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

答案 4 :(得分:0)

试试这段代码。对你有用。

NSString *strKey = @"act_date";
NSSortDescriptor *sortByName = [NSSortDescriptor sortDescriptorWithKey:strKey ascending:YES];

NSArray *sortDescriptors = [NSArray arrayWithObject:sortByName];
tempArr = (NSMutableArray *)[arr sortedArrayUsingDescriptors:sortDescriptors];