2016-04-22 4 views
0

Ich kann keinen Weg finden, um die n th Element in einem Array mit einem NSPredicate String. Zum Beispiel:NSPredicate String, um n-tes Element im Array zu erhalten

//You cannot touch or modify the code inside this method. You can only use the predicate string param to filter the array. 
- (NSArray *)filterUsingNSPredicate:(NSString *)PredicateString 
{ 
    NSArray *array = @[ 
     @"firstItem", 
     @"secondItem", 
     @"thirdItem", 
     @"fourthItem", 
    ]; 

    NSPredicate *pred = [NSPredicate predicateWithFormat:PredicateString]; 
    NSArray *filtered = [array filteredArrayUsingPredicate:pred]; 
    NSLog(@"This is the second item in the array! %@",filtered); //Thats the only thing in the array. 
    return filtered; 
} 
+2

Gibt es einen Grund, warum Sie ein Prädikat Zeichenfolge verwenden möchten und nicht nur 'Array [indexYouWant] 'oder' [array objectAtIndex: indexYouWant] '? – AdamPro13

+0

Ja für was ich tun, ich habe keinen Verweis auf das Array selbst, ich kann nur mit NSPredicateString abfragen. Ich bekomme in diesem Fall nur das gefilterte Array zurück. – Rafthecalf

+0

Sie können dieses Array in einem temporären Array speichern und 'objectAtIndex' verwenden, um das n-te Element zu erhalten. – Lion

Antwort

0

Wenn Sie ein Objekt erhalten möchten, erhalten Sie kein NSArray, weil Sie nur ein Objekt erhalten.

Sie können mit NSPredicate nach dem Namen eines Objekts in Ihrem Array suchen. Aber was du sagst, das ist nicht was du willst.

Sie können [array objectAtIndex:index]; verwenden, die das Objekt an der Position zurückgibt, die Sie im Index angeben. Wenn Sie den Index eines Objekts haben möchten, können Sie [array indexOfObject:object]; verwenden, das den Index des Objekts zurückgibt.

0

Prädikate wissen nicht über Array-Indizes. Sie wissen nur über das einzelne Objekt, das ihnen gleichzeitig präsentiert wird, und ob dieses Objekt das Prädikat wahr oder falsch macht.

Die Art, wie Sie dieses Problem in den Kommentaren darstellen, macht absolut keinen Sinn. Wenn Sie eine gefilterte Version des Arrays erhalten können, können Sie das Array abrufen. Hier ist, wie Sie die Methode verwenden Sie zeigen, dies zu tun:

NSArray * fullList = [theAPI filterUsingNSPredicate:@"TRUEPREDICATE"]; 

TRUEPREDICATE is a special value for predicate strings, die immer true ergibt. Wenn Sie ein Array mit diesem Prädikat filtern, ist das Ergebnis identisch mit dem Original.

Sie haben nun einen Verweis auf das Array und können wie gewohnt indizieren.

Verwandte Themen