2016-07-26 22 views
0

I-Array haben, die Wörterbücher haben, für exp ..Wie sortieren Array mit 2 Schlüssel

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

Jetzt möchte ich alphanummerisch dieses Array sortieren, wie dieser ..

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

Aber Wenn ein Wörterbuch keinen Namen hat, wird es unter Verwendung der Adresse
sortiert. Jeder Vorschlag, wie können wir es tun?

Ich habe folgenden Code versucht, aber kein richtiges Ergebnis zu erzielen,

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

Ich habe 1 Idee, dass Adress-String in Namen und als Art-Array und einmal Array sortierte als wird es zu Adresse ändern zurück,
Aber wollen wissen, gibt es eine andere Option oder nicht.

Antwort

1

Ich glaube, das den Trick tun könnte der Code getestet

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 so

einige Optimierungen benötigen
+0

Dieses ist perfekt, Danke. – Dilip

+0

überhaupt kein Problem – Fonix