2011-09-27 4 views
0

J'ai un NSArray. Disons que j'ai 3 objets dedans. par exempleposition du tableau objectif-c

test (
     { 
     Code = A; 
     Comment = "None "; 
     Core = Core; 
},{ 
     Code = B; 
     Comment = "None "; 
     Core = Core; 
},{ 
     Code = C; 
     Comment = "None "; 
     Core = Core; 
}) 

Je souhaite rechercher un 'Code' et retourner l'index du tableau. Comment puis-je faire ceci? par exemple. localisez le code 'b' et j'aurais renvoyé '1' (puisque c'est la deuxième position dans le tableau).

Répondre

2

Sur le dessus de ma tête, il pourrait y avoir quelques fautes de frappe. Je suppose les objets à l'intérieur de votre tableau sont les dictionnaires:

for (NSDictionary dict in testArray) 
{ 
    if ([[dict objectForKey:"Code"] isEqualToString:@"B"] 
    { 
     NSLog (@"Index of object is %@", [testArray indexOfObject:dict]); 
    } 
} 

Vous pouvez également utiliser (probablement plus efficace)

- (NSUInteger)indexOfObjectPassingTest:(BOOL (^)(id obj, NSUInteger idx, BOOL *stop))predicate 

passer un prédicat de @"Code == 'B'" sur le bloc. Cette méthode retournera spécifiquement l'index des objets passant le test.

0

Si vous ciblez iOS 4.0 ou supérieur, il existe NSArray méthodes qui vous permettent de le faire en utilisant des blocs.

– indexOfObjectPassingTest:
– indexesOfObjectsPassingTest:
etc ..

NSArray *test = [NSArray arrayWithObjects: 
       [NSDictionary dictionaryWithObjectsAndKeys:@"A", @"Code", @"None", @"Comment", @"Core", @"Core", nil], 
       [NSDictionary dictionaryWithObjectsAndKeys:@"B", @"Code", @"None", @"Comment", @"Core", @"Core", nil], 
       [NSDictionary dictionaryWithObjectsAndKeys:@"C", @"Code", @"None", @"Comment", @"Core", @"Core", nil], 
       nil]; 
NSIndexSet *indexes =[test indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) { 
    return [[obj valueForKey:@"Code"] isEqualToString:@"B"]; 
}]; 

NSLog(@"Indexes with Code B: %@", indexes); 
0

Dans sa forme la plus simple, j'utiliser ce qui suit:

- (NSInteger)indexForText:(NSString*)text inArray:(NSArray*)array 
{ 
    NSInteger index; 
    [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    YourObject* o = (YourObject*)obj; 
    if ([[o property] isEqualToString:text]) { 
     index = idx; 
     *stop = YES; 
    } 
    }]; 
    return index; 
} 
Questions connexes