sorting字典数组

嗨,我有一个以下的字典数组,我想要使用关键字“BirthDate”sorting数组,我的代码如下

NSLog(@"nodeEventArray == %@", temp); NSSortDescriptor *dateDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"BirthDate" ascending:YES]; NSArray *sortDescriptors = [NSArray arrayWithObject:dateDescriptor]; NSArray *sortedEventArray = [temp sortedArrayUsingDescriptors:sortDescriptors]; NSLog(@"sortedEventArray == %@", sortedEventArray); 

但我无法正确sorting任何人可以请告诉我如何sorting基于“BirthDate”键的字典数组。自出生date即将作为服务string

样本数组字典:

  nodeEventArray = ( { BirthDate = "05/04/1986"; Email = ""; FirstName = Test; IsSpouse = 0; LastName = Test; MiddleInitial = ""; PatientID = ""; Phone = ""; ScacntronCSVId = 40409; SlotID = 1; UserName = "Tes_02192013010055"; }, { BirthDate = "02/14/1986"; Email = ""; FirstName = Guest; IsSpouse = 0; LastName = Guest; MiddleInitial = ""; PatientID = ""; Phone = ""; ScacntronCSVId = 40410; SlotID = 2; UserName = "Gue_02192013014725"; }, { BirthDate = "02/17/1987"; Email = ""; FirstName = User; IsSpouse = 0; LastName = User; MiddleInitial = ""; PatientID = ""; Phone = ""; ScacntronCSVId = 40411; SlotID = 3; UserName = "Use_02192013020726"; } ) 

您可以使用比较器来代替使用sortDescriptor

 NSArray *sortedArray = [nodeEventArray sortedArrayUsingComparator: ^(id obj1, id obj2) { NSDateFormatter *dateFormator = [[NSDateFormatter alloc] init]; NSDate *date1 = [dateFormator dateFromString:[[obj1 objectForKey:@"BirthDate"] stringByReplacingOccurrencesOfString:[[obj1 objectForKey:@"BirthDate"] lastPathComponent] withString:@"2013"]]; NSDate *date2 = [dateFormator dateFromString:[[obj1 objectForKey:@"BirthDate"] stringByReplacingOccurrencesOfString:[[obj1 objectForKey:@"BirthDate"] lastPathComponent] withString:@"2013"]]; if ([date1 earlierDate:date2] == date1) { return (NSComparisonResult)NSOrderedDescending; }else{ return (NSComparisonResult)NSOrderedAscending; } }]; 

我假设该数组来自服务器或某些东西(因此“用户名”位),但仍然是,最好将每个用户/事件/无论存储在一个NSDate对象。 这样,你可以按datesorting,它的工作原理。

但是,如果你想sorting这个数组,然后…

如果你想按BirthDatesorting(使用date),那么你需要将string转换为实际的NSDates。

 NSDateFormatter *df = [[NSDateFormatter alloc] init]; df.dateFormat = @"MM/dd/yyyy"; [blah sortedArrayUsingComparator:^NSComparisonResult(NSDictionary *obj1, NSDictionary *obj2) { NSDate *date1 = [df dateFromString:[obj1 objectForKey:@"BirthDate"]; NSDate *date2 = [df dateFromString:[obj2 objectForKey:@"BirthDate"]; return [date1 compare:date2]; }]; 

这应该做到这一点。

它会将string转换成date,然后比较它们。