2016-07-26 47 views
-2

我有以下NSMutableArray排序NSMutableArray里与键值

我想升序

排序按字母顺序名称键根据DOBDate数组元素进行排序。

myarraytosort":[ 
    {“DOBDate":"Jul 18, 1987”,”Name”:”Aman Singh”}, 
    {“DOBDate”:”Dec 18, 2000”,”Name”:”Dman Kumar”}, 
    {“DOBDate”:”June 18, 1990”,”Name”:”Cman Singh”}, 
    nil 
] 

代码我尝试,但没有工作

为DOBDate

NSSortDescriptor *dateDescriptor = [NSSortDescriptor 
              sortDescriptorWithKey:@"DOBDate" 
              ascending:NO]; 
     NSArray *sortDescriptors = [NSArray arrayWithObject:dateDescriptor]; 
     NSArray *sortedEventArray = [myarraytosort 
            sortedArrayUsingDescriptors:sortDescriptors]; 
     NSLog(@"sortedEventArray == %@", sortedEventArray); 

对于字母

NSSortDescriptor *dateDescriptor = [NSSortDescriptor 
              sortDescriptorWithKey:@"Name" 
              ascending:YES]; 
     NSArray *sortDescriptors = [NSArray arrayWithObject:dateDescriptor]; 
     NSArray *sortedEventArray = [myarraytosort 
            sortedArrayUsingDescriptors:sortDescriptors]; 
     NSLog(@"sortedEventArray == %@", sortedEventArray); 
+0

入住这http://stackoverflow.com/questions/805547/how-to-sort-an-nsmutablearray-with-custom-objects-in-it?rq=1 –

+4

这将是更好地使用' NSDate'而不是'NSString'对象来表示日期。否则,您必须使用'sortUsingComparator:'和一个自定义比较器(使用'NSDateFormatter')。 – Larme

回答

1

DOBDate键包含字符串甲日期,所以你需要理清你的约会使用Comparator就像这样

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
    [df setDateFormat:@"MMM dd, yyyy"]; 
NSArray *sortedArray = [yourArray sortedArrayUsingComparator:^NSComparisonResult(NSDictionary *obj1, NSDictionary *obj2) { 
    NSDate *d1 = [df dateFromString:(NSString*) [obj1 valueForKey:@"DOBDate"]]; 
    NSDate *d2 = [df dateFromString:(NSString*) [obj2 valueForKey:@"DOBDate"]]; 
    return [d1 compare: d2]; 
}]; 
+0

return [d1 compare:d2];很好的工作 – iphonemaclover

+0

欢迎队友快乐编码:) –

+0

我建议把'df'放在'NSComparisonResult()'之外,因为'NSDateFormatter'的alloc/init是耗费时间(和CPU),它总是一样的。 – Larme