我有阵列赞:
<__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];
}];
但它只返回带有日期的数组,如何添加带有排序日期数组的所有数据?
答案 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];