2016-07-26 55 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]; 

我有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