Wyszukiwanie ciągów w tablicy ciągów w celu c

87

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

Filthy Knight
źródło
Czy to twoja praca domowa? Myślę, że to łatwe. Dlaczego po prostu zapętlać i porównywać?
vodkhang
na, to nie praca domowa, potrzebowałem najlepszego algorytmu do wyszukania określonego ciągu, który nie kosztuje dużo zasobów w iPhonie, dlatego zadałem pytanie
Filthy Knight
możliwy duplikat obiektu NSArray wyszukiwania celu-C dla ciągu?
nielsbot

Odpowiedzi:

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

lub jeśli chcesz wiedzieć, gdzie to jest

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

Gorąco polecam przeczytanie dokumentacji na NSArray . Najlepiej zrobić to przed wysłaniem pytania :-)

JeremyP
źródło
powiedzmy, że mam tablicę zawierającą NSArray * myArr = [[NSArrayocation] initWithObjects: @ "test1", @ "test3", @ "test3", nil]; chciałem wyszukać "tes", powiedzmy, że chciałem zadziałać stuf z dziką kartą, którego nie mogłem zrozumieć, więc zadałem to pytanie, ale dziękuję za odpowiedź, doceniam
Filthy Knight
Albo przechodzisz przez pętlę i testujesz każdą wartość, albo przeglądasz NSPredicate, który zapewnia dość wszechstronne wyszukiwanie obiektów kolekcji - prawie tak potężne jak klauzule SQL where. developer.apple.com/mac/library/documentation/cocoa/Conceptual/…
JeremyP
45

Możesz użyć klasy NSPredicate do wyszukiwania ciągów w tablicy ciągó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 efektywny sposób wyszukiwania ciągów w tablicy ciągów

Rashid
źródło
działa to dobrze dla małych tablic, ale jeśli masz bardzo dużą tablicę (ponad 30 000 rekordów), możesz mieć jakiś pomysł
amit gupta
Następnie zachowaj posortowaną tablicę i użyj wyszukiwania binarnego (bsearch) do lokalizowania i wstawiania nowych elementów. NSArray / NSMutableArray mają do tego metody.
spstanley
3
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];
Rahul K Rajan
źródło
Chociaż ten fragment kodu może odpowiedzieć na pytanie, lepiej jest dołączyć wyjaśnienie, w jaki sposób odpowiada na pytanie, aby ta odpowiedź była przydatna dla przyszłych odwiedzających witrynę
RobV
Ten fragment kodu działa dobrze, aby znaleźć słowo w tablicy słów.
Rahul K Rajan
Chcę to zrobić z początkowym tekstem. Mam na myśli, że szukany tekst musi być dopasowany od początku, a nie z dowolnego miejsca. Proszę o pomoc
Gautam Shrivastav