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?

Schmutziger Ritter
quelle
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
Mögliches Duplikat von Objective-C Search NSArray nach String?
Nielsbot

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 :-)

JeremyP
quelle
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

Rashid
quelle
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];
Rahul K Rajan
quelle
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