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

时间:2016-07-26 04:43:07

标签: 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 个答案:

答案 0 :(得分: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];
}];

havnt测试了代码,因此可能需要一些调整