[英]Sort an NSArray of NSDictionary
我有一个NSDrour NSDictionary unsortedArray看起来像:
(
{symbol = "ABC"; price = "9.01";}
{symbol = "XYZ"; price = "3.45";}
...
(
这是排序代码:
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"price" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:descriptor];
NSArray *sortArray = [unsortedArray sortedArrayUsingDescriptors:sortedDescriptors];
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"symbol" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:descriptor];
NSArray *sortArray = [unsortedArray sortedArrayUsingDescriptors:sortedDescriptors];
符号键的排序结果是正常的,但价格键没有排序。 可能有什么不对? 价格是在NSString,但想要排序看起来像
3.45
9.01
...
提前致谢。
使用NSNumber作为字典中的价格,排序描述符将处理数值而不是字符串,例如
NSArray *dictArray = @[ @{@"symbol" : @"ABC", @"price" : @9.01},
@{@"symbol" : @"XYZ", @"price" : @3.45} ];
或者,如果价格是一个字符串
NSArray *dictArray = @[ @{@"symbol" : @"ABC", @"price" : @"9.01"},
@{@"symbol" : @"XYZ", @"price" : @"3.45"} ];
使用比较器,需要比较一对词典的价格,例如
NSArray *sortedArray = [dictArray
sortedArrayUsingComparator:^NSComparisonResult(NSDictionary *dict1,
NSDictionary *dict2) {
double price1 = [[dict1 valueForKey:@"price"] doubleValue];
double price2 = [[dict2 valueForKey:@"price"] doubleValue];
if(price1 > price2)
return (NSComparisonResult)NSOrderedDescending;
if(price1 < price2)
return (NSComparisonResult)NSOrderedAscending;
return (NSComparisonResult)NSOrderedSame;
}];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.