[英]How to compare an array of NSStrings containing Dates in ascending order
I have an Array in which contains a list of dates represented as strings: 我有一个数组,其中包含以字符串表示的日期列表:
NSMutableArray *objArray=[[NSMutableArray alloc]init];
[objArray addObject:@"18-01-2013 2:51"];
[objArray addObject:@"16-01-2013 5:31"];
[objArray addObject:@"15-01-2013 3:51"];
[objArray addObject:@"17-01-2013 4:41"];
[objArray addObject:@"03-02-2013 3:21"];
[objArray addObject:@"05-01-2013 3:01"];
please tell me how to arrange this array in ascending order by using dates. 请告诉我如何使用日期按升序排列此数组。
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; NSDateFormatter * formatter = [[[[NSDateFormatter alloc] init] autorelease]; [formatter setDateFormat:@"dd-MM-yyyy hh:mm"]; [格式化程序setDateFormat:@“ dd-MM-yyyy hh:mm”];
NSComparator compareDates = ^(id string1, id string2)
{
NSDate *date1 = [formatter dateFromString:string1];
NSDate *date2 = [formatter dateFromString:string2];
return [date1 compare:date2];
};
NSSortDescriptor * sortDesc = [[[NSSortDescriptor alloc] initWithKey:@"self" ascending:NO comparator:compareDates]autorelease];
[objArray sortUsingDescriptors:[NSArray arrayWithObject:sortDesc]];
By using this code i got exact output, thank you for all 通过使用此代码,我得到了准确的输出,谢谢大家
we can do another way to get sorting array with dates 我们可以做另一种方式来获取日期排序数组
NSArray *objArr = [[NSArray alloc]initWithObjects:@"2003/08/02 03:00 ",@"2001/02/04 04:00 ",@"2001/02/04 05:00 ",@"2010/05/01 08:00 ",@"2002/12/02 02:00 ",@"2012/11/05 02:00 ",@"2013/10/01 12:00 ", nil];
NSArray *sortedArray = [objArr sortedArrayUsingComparator:^(id firstObject, id secondObject) {
return [(NSDate * )firstObject compare: (NSDate * ) secondObject];
}];
NSLog(@"sorteed Array %@",sortedArray);
NSSortDescriptor * descLastname = [[NSSortDescriptor alloc] initWithKey:@"active" ascending:YES];
[livevideoparsingarray sortUsingDescriptors:[NSArray arrayWithObjects:descLastname, nil]];
[descLastname release];
videoparsing = [livevideoparsingarray copy];
livevideoparsingarray is my array which I have sort & active is my tag which is in array which I have sort. livevideoparsingarray是我排序的数组,而active是我排序的数组中的标签。 You change with your requirements. 您可以根据自己的要求进行更改。
You can do this by using NSSortDescriptor
您可以使用NSSortDescriptor
做到这NSSortDescriptor
NSSortDescriptor* sortOrder = [NSSortDescriptor sortDescriptorWithKey: @"self" ascending: YES];
return [objArray sortedArrayUsingDescriptors: [NSArray arrayWithObject: sortOrder]];
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSString *str1 = @"18-01-2013";
NSString *str2 = @"16-01-2013";
NSString *str3 = @"15-01-2013";
NSString *str4 = @"17-01-2013";
NSString *str5 = @"03-02-2013";
NSString *str5 = @"05-01-2013";
NSArray *arr = [NSArray arrayWithObjects:str1, str2, str3,str4,str5 nil];
arr = [arr sortedArrayUsingFunction:dateSort context:nil];
NSLog(@"New dates %@",arr);
}
//The date sort function
NSComparisonResult dateSort(NSString *s1, NSString *s2, void *context) {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd-MM-yyyy"];
NSDate *d1 = [formatter dateFromString:s1];
NSDate *d2 = [formatter dateFromString:s2];
return [d1 compare:d2]; // ascending order
// return [d2 compare:d1]; // descending order
}
Try this 尝试这个
NSMutableArray *objArray;
objArray=[[NSMutableArray alloc] init];
[objArray addObject:@"18-01-2013 2:51"];
[objArray addObject:@"16-01-2013 5:31"];
[objArray addObject:@"15-01-2013 3:51"];
[objArray addObject:@"17-01-2013 4:41"];
[objArray addObject:@"03-02-2013 3:21"];
[objArray addObject:@"05-01-2013 3:01"];
NSSortDescriptor *sort_Date=[[NSSortDescriptor alloc] initWithKey:@"self"ascending:NO];
NSLog(@"%@",[[objArray sortedArrayUsingDescriptors:@[sort_Date]] description]);
I got below response 我没有得到回应
2013-02-06 11:23:35.100[1135:c07]
(
"18-01-2013 2:51",
"17-01-2013 4:41",
"16-01-2013 5:31",
"15-01-2013 3:51",
"05-01-2013 3:01",
"03-02-2013 3:21"
) )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.