ios - 对 NSDictionary 的 NSArray 进行排序

标签 ios iphone objective-c ipad

我有一个 NSArray of 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];

symbol key 的排序结果正常,但 price key 的排序结果未排序。有什么问题吗?价格在 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;

}];

关于ios - 对 NSDictionary 的 NSArray 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19985107/

相关文章:

ios - 在 Swift 中从 Flickr 异步加载 UICollectionView 的图像

ios - Xcode6 IPAD 1x 2x 按钮

iphone - 如何在viewDidAppear方法或viewDidLoad中请求JSON数据?

ios - 使用 Objective-C 和 Swift 创建内存泄漏

objective-c - 圆角iPhone的最有效方法

ios - 使用 AFNetworking 2 进行 POST 请求时 cocoa 错误 3840

ios - UITableView 底部单元格隐藏在屏幕下方

ios - NSArray indexOfObject 返回 nil

ios - 如何在我的自定义 cocoapod 中导入 Alamofire/AFNetworking

iphone - 协议(protocol)声明警告