2010-12-06 5 views
1

Ich habe ein Array von Objekten, die ich mithilfe eines Prädikats filtern möchte, aber ich konnte die Syntax nicht herausfinden (oder ob das unmöglich ist).Filtern nach Eigenschaften von Objekten in einem Array mit einem Prädikat

sagen Lassen Sie das Objekt Lage und es hat Eigenschaften von Breite und Länge. Ich habe eine Reihe von diesen genannt allLocations bekam und ich möchte eine neue Reihe von Standorten produzieren, wo die Breite Eigenschaft größer als 30.

Wenn verwaltete Objekte Holen können Sie einfach den Eigenschaftsnamen verwenden, aber nicht so mit Arrays:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"latitude > 30.0"]; 

kehrt keine Spiele (obwohl es viele Lage sind Objekte mit Breiten> 30,0

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.latitude > 30.0"]; 

entweder nicht gut ist, während

.
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"[SELF latitude] > 30.0"]; 

und

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"[location latitude] > 30.0"]; 

Wurf Ausnahmen.

Bin ich kein Glück?

Antwort

2

Was Sie suchen, ist die filteredArrayUsingPredicate: Methode von NSArray. Ihr erster Prädikatversuch oben funktioniert gut, wenn Sie ihn an diese Methode übergeben.

Es ist erwähnenswert, dass NSMutableArray eine andere Methode verwendet, um einen ähnlichen Effekt zu erreichen, filterUsingPredicate:. Die MutableArray-Version ändert den Empfänger, während die Array-Version ein neues Array zurückgibt.

Referenz:
NSArray Class Reference
NSMutableArray Class Reference

+0

filteredArrayUsingPredicate ist sicherlich das, was ich verwende, aber ich bekomme ein leeres Array aus dem ersten Prädikat, daher meine Frage. Ich werde wieder damit spielen, um sicherzustellen, dass ich etwas nicht verpasse, aber das leere Array ist der Grund, warum ich die Frage gepostet habe. –

+0

Was ist die Art von 'Breite'? Ich habe gerade einige Prädikat-Tests für ein Array von Objekten mit einer numerischen Eigenschaft ausgeführt, und das Äquivalent des ersten Prädikats funktionierte für die Eigenschaften vom Typ "float" und "NSNumber". – Endemic

+0

Obwohl ich zu 100% sicher bin, dass ich das Prädikat gegen ein NSArray laufen lasse, habe ich es stattdessen gegen ein NSMutableArray ausgeführt. Ich bin überrascht, dass es während des Builds keine Beanstandung gab. Danke für Ihre Hilfe. –

Verwandte Themen