Zeichenfolgensuche im Zeichenfolgenarray im Ziel c


87

Ich möchte eine bestimmte Zeichenfolge im Array von Zeichenfolgen in Ziel c suchen. Kann mir jemand dabei helfen?


Ist es deine Hausaufgabe? Ich denke das ist einfach zu machen. Warum nur schleifen und vergleichen?
Vodkhang

na, es ist keine Hausaufgabe, ich brauchte den besten Algorithmus, um eine bestimmte Zeichenfolge zu suchen, die nicht viel Ressourcen im iPhone kostet, deshalb habe ich die Frage gestellt
Filthy Knight

Antworten:


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

oder wenn Sie wissen müssen, wo es ist

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

Ich empfehle Ihnen dringend, die Dokumentation zu NSArray zu lesen . Am besten machst du das, bevor du deine Frage postest :-)


Nehmen wir an, ich habe ein Array mit NSArray * myArr = [[NSArray-Zuweisung] initWithObjects: @ "test1", @ "test3", @ "test3", nil]; Ich wollte nach "tes" suchen, sagen wir mal, ich wollte, dass ein Joker funktioniert, den ich nicht verstehen konnte, also stellte ich diese Frage, aber danke für die Antwort, geschätzt
Filthy Knight

Sie können entweder jeden Wert durchlaufen und testen oder sich NSPredicate ansehen, das eine ziemlich umfassende Suche nach Sammlungsobjekten bietet - fast so leistungsfähig wie SQL where-Klauseln. developer.apple.com/mac/library/documentation/cocoa/Conceptual/…
JeremyP

45

Sie können die NSPredicate-Klasse zum Suchen von Zeichenfolgen in einem Array von Zeichenfolgen verwenden. Siehe den folgenden Beispielcode.

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];

Dies ist die effizienteste Methode zum Suchen von Zeichenfolgen in einer Reihe von Zeichenfolgen


Dies funktioniert gut für kleine Arrays, aber wenn Sie ein sehr großes Array haben (mehr als 30.000 Datensätze), können Sie eine Idee haben
Amit Gupta

Halten Sie das Array dann sortiert und verwenden Sie eine binäre Suche (bsearch) zum Auffinden und Einfügen neuer Elemente. NSArray / NSMutableArray haben Methoden dafür.
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];

Während dieses Code-Snippet die Frage beantworten kann, ist es besser, eine Erklärung zu geben, wie es die Frage beantwortet, damit diese Antwort für zukünftige Besucher der Site nützlich ist
RobV

Dieser Code funktioniert gut, um das Wort in einer Reihe von Wörtern zu finden.
Rahul K Rajan

Ich möchte dies mit dem Anfangstext tun. Ich meine, der Suchtext muss von Anfang an nicht von irgendwoher abgeglichen werden. Bitte helfen Sie
Gautam Shrivastav
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.