繁体   English   中英

对NSDictionary的NSArray进行排序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM