2012-07-17 13 views
7

Wie erhalten Sie den größten Nutzen eines NSArray mit Wörterbüchern?Wie erhält man den größten Wert von NSArray-Wörterbüchern?

Lets sagen, ich habe NSArray enthält Wörterbücher mit Schlüssel "Alter", "Name", etc. Jetzt möchte ich den Rekord mit dem höchsten Alter zu bekommen. Ist das mit KVC Magie möglich? Oder muss ich es iterieren und "manuell" machen?

Ich habe versucht, mit etwas ähnliches zu diesem:

int max = [[numbers valueForKeyPath:@"@max.intValue"] intValue]; 
+0

wenn Sie größten Wert von AGE ... Verwendung @ Höchstalter – waheeda

+1

Man braucht, ich wünschte, manchmal hatten wir so etwas wie [LINQ] (http://en.wikipedia.org/wiki/Language_Integrated_Query) in Cocoa .... – Jay

Antwort

14

Wenn "intValue" kein Schlüssel in Ihrem Wörterbuch ist, wird der Schlüsselpfad nicht viel nutzen.

Wenn es das maximale Alter ist, nach dem Sie suchen, sollten Sie @"@max.age" (auf dem Wörterbuch) verwenden, um es zu bekommen. Das gleiche gilt für jeden anderen Schlüssel in Ihrem Wörterbuch.

[myDictionary valueForKeyPath:@"@max.age"]; 

Wenn numbers ist ein Array von Werten Sie @"@max.self" als Schlüsselpfad verwenden könnte den größten Wert zu erhalten.

[myArrayOfNumbers valueForKeyPath:@"@max.self"]; 
+1

Ich benutze Ihre zweite Zeile, um Max Element von meinem NSMutableArray (die alle NSNumber Objekte enthält) zu erhalten Ich erhalte diesen Fehler: *** Beenden App aufgrund der nicht abgefangenen Ausnahme 'NSUnknownKeyException', Grund: '[<__ NSCFNumber 0x1dd44bc0> valueForUndefinedKey:]: Diese Klasse ist nicht Key-Code-kompatibel für den Schlüssel max.' Irgendeine Idee, was ist los? – uerceg

+0

Es tut mir leid. Ich nahm an, dass es sich wie ein NSPredikat verhalten würde und benutze 'self', wenn nichts anderes angegeben wurde. Das korrekte zweite Beispiel wäre '[myArrayOfNumbers valueForKeyPath: @" @ max.self "];' (Antwort aktualisiert) –

+0

Ich dachte, Sie werden diese Lösung vorschlagen, aber wirklich seltsame Sache ist, dass diese aktualisierte Lösung für mich auch nicht funktioniert . Ich bekomme die gleiche Fehlermeldung wie zuvor. – uerceg

1

Sie fast dort sind, müssen Sie nur die genaue Feld geben Sie von dem Sie den Maximalwert wollen wollen:

NSInteger max = [[numbers valueForKeyPath:@"@max.age"] integerValue]; 

nahm ich mir die Freiheit Ihre int s NSInteger s zu ändern, falls jemand will beide diesen Code verwenden, um auf iOS und OS X

+1

Dies ist eine wirklich gute Antwort :) und es ist anders genug von der angenommenen Antwort, um eine Abstimmung zu rechtfertigen – Rambatino

Verwandte Themen