ios - 如何使用2个键对数组进行排序

标签 ios sorting nsarray

我有一个包含字典的数组,用于 exp..

[
  {
    name : dilip
  },
  {
    address : ahmedabad
  },
  {
    name : ajay
  },
  {
    address : baroda
  },
  {
    name : ram
  },
  {
    address : dwarka
  },
  .
  .
  .
]

现在我想按字母数字顺序对这个数组进行排序,就像这样..

(
    {
        address = ahmedabad;
    },
        {
        name = ajay;
    },
        {
        address = baroda;
    },
        {
        name = dilip;
    },
        {
        address = dwarka;
    },
        {
        name = ram;
    }
)

但是如果任何字典没有名称,那么它将使用地址排序,
有什么建议我们该怎么做吗?

我试过下面的代码,但没有得到正确的结果,

 NSSortDescriptor * brandDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
 NSSortDescriptor * productTitleDescriptor = [[NSSortDescriptor alloc] initWithKey:@"address" ascending:YES];
 NSArray * sortDescriptors = [NSArray arrayWithObjects:brandDescriptor, productTitleDescriptor, nil];
 NSArray * sortedArray = [ary sortedArrayUsingDescriptors:sortDescriptors];

我有 1 个想法,在名称中添加地址字符串,然后对数组进行排序,一旦数组排序,就会将其改回地址,
但是想知道有没有其他的选择。

最佳答案

认为这可能会成功

NSArray * sortedArray = [array sortedArrayUsingComparator:^NSComparisonResult(NSDictionary * _Nonnull obj1, NSDictionary *  _Nonnull obj2) {

    NSString * s1 = [obj1 objectForKey:@"name"];
    if(s1 == nil){
        s1 = [obj1 objectForKey:@"address"];
    }

    NSString * s2 = [obj2 objectForKey:@"name"];
    if(s2 == nil){
        s2 = [obj2 objectForKey:@"address"];
    }

    return [s1 compare:s2];
}];

还没有测试代码,所以可能需要一些调整

关于ios - 如何使用2个键对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38581149/

相关文章:

ios - 如何整理NSArray仅获取具有特定字符串的内容

ios - 用户执行操作后切换到不同选项卡中的 View Controller

arrays - 查找数组中缺失的元素

javascript - 根据 Javascript 中的指令对列表进行排序

php - 在 PHP 中向排序数组中插入元素有哪些更好的方法

ios - 从路径段数组创建 NSDictionary

iphone - 重新排列 NSArray 和 NSDictionary 条目

ios - ios应用程序具有不同背景图像的自定义tableview单元格

ios - cordova/ios/hybrid 应用程序 - UITableView 加载项目不正确且无序

objective-c - 子类化 UIBarButtonItem