2010-05-10 8 views
74

Chcę wyszukać określony ciąg w tablicy ciągów znaków w punkcie c. Czy ktoś może mi pomóc w tym zakresie?Wyszukiwanie ciągów w tablicy ciągów w obiekcie c

+0

Czy swoją pracę domową? Myślę, że to jest łatwe do zrobienia. Dlaczego po prostu zapętlanie i porównywanie? – vodkhang

+0

na, to nie praca domowa, potrzebowałem najlepszego algorytmu do wyszukania określonego ciągu, który nie kosztuje dużo zasobów w iphone, to dlaczego postawiłem pytanie –

+0

możliwy duplikat [Objective-C Search NSArray for String?] (Http: // stackoverflow .com/questions/3588344/objective-c-search-nsarray-for-string) – nielsbot

Odpowiedz

170
BOOL isTheObjectThere = [myArray containsObject: @"my string"]; 

lub jeśli trzeba wiedzieć, gdzie to jest

NSUInteger indexOfTheObject = [myArray indexOfObject: @"my string"]; 

gorąco polecam zapoznanie się z documentation on NSArray. Najlepiej to zrobić przed opublikowaniem pytania :-)

+0

pozwala na napisanie, że mam tablicę zawierającą NSArray * myArr = [[NSArray alloc] initWithObjects: @ "test1", @ "test3", @ "test3", nil]; Chciałem wyszukać "tes", powiedzmy, że chciałem pracować z dziką kartą, której nie mogłem zrozumieć, więc zadałem to pytanie, ale dzięki za odpowiedź, docenione –

+0

Przeszukujesz i testujesz każdą wartość, lub zajrzyj do NSPredicate, które zapewnia całkiem obszerne wyszukiwanie obiektów kolekcji - prawie tak samo wydajne jak klauzule SQL. http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/Predicates/predicates.html#//apple_ref/doc/uid/TP40001789 – JeremyP

42

Możesz użyć klasy NSPredicate do wyszukiwania ciągów w tablicy łańcuchów. Zobacz poniższy przykładowy kod.

NSMutableArray *cars = [NSMutableArray arrayWithObjects:@"Maruthi",@"Hyundai", @"Ford", @"Benz", @"BMW",@"Toyota",nil]; 

NSString *stringToSearch = @"i"; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@",stringToSearch]; // if you need case sensitive search avoid '[c]' in the predicate 

NSArray *results = [cars filteredArrayUsingPredicate:predicate]; 

Jest to najbardziej skuteczny sposób na wyszukiwanie ciągów znaków w tablicy ciągów

+0

działa to dobrze dla małych układów, ale jeśli masz bardzo duży array (więcej niż 30k rekordów) może mieć jakiś pomysł –

+0

Następnie należy posortować tablicę i użyć wyszukiwania binarnego (bsearch) do lokalizowania i wstawiania nowych elementów. NSArray/NSMutableArray mają na to metody. – spstanley

2
NSMutableArray *cars = [NSMutableArray arrayWithObjects:@"Max",@"Hai", @"Fine", @"Bow", @"Bomb",@"Toy",nil]; 

NSString *searchText = @"i"; 
NSArray *results = [cars filteredArrayUsingPredicate:predicate]; 

// if you need case sensitive search avoid '[c]' in the predicate 

NSPredicate *resultPredicate = [NSPredicate 
           predicateWithFormat:@"title contains[c] %@", 
           searchText]; 


searchResults = [cars filteredArrayUsingPredicate:resultPredicate]; 
+0

Podczas gdy ten fragment kodu może odpowiedzieć na pytanie, lepiej jest podać wyjaśnienie, w jaki sposób odpowiada na pytanie, aby ta odpowiedź była przydatna dla przyszłych odwiedzających stronę – RobV

+0

Ten fragment kodu działa dobrze, aby znaleźć słowo w tablicy słowa. –