2016-07-26 7 views
0

私はEXPのために、辞書を持っている配列を持っている... 使用して配列をソートする方法を2キー

[ 
    { 
    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]; 

I持って1つのアイデア、名前でソート配列よりも、そのアドレスに戻ってそれを変更しますよりも、ソートされた配列一度アドレス文字列を追加すること、
しかし、他のオプションがあるかどうか知りたいですか?

答えて

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はそうありがとう、これは完璧であるいくつかの調整

+0

を必要とするかもしれないコードをテストした。考えます – Dilip

+0

全く問題ありません – Fonix

関連する問題