Recherche de chaînes dans un tableau de chaînes dans l'objectif c

87

Je souhaite rechercher une chaîne spécifique dans le tableau de chaînes de l'objectif c. Quelqu'un peut-il m'aider à cet égard?

Sale chevalier
la source
Est-ce vos devoirs? Je pense que c'est facile à faire. Pourquoi simplement boucler et comparer?
vodkhang
na, ce ne sont pas des devoirs, j'avais besoin du meilleur algorithme pour rechercher une chaîne spécifique qui ne coûte pas beaucoup de ressources dans l'iphone, c'est pourquoi je pose la question
Filthy Knight
duplication possible du NSArray de recherche Objective-C pour String?
nielsbot

Réponses:

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

ou si vous avez besoin de savoir où il se trouve

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

Je vous recommande fortement de lire la documentation sur NSArray . Il est préférable de le faire avant de poster votre question :-)

JeremyP
la source
disons que j'ai un tableau contenant NSArray * myArr = [[NSArray alloc] initWithObjects: @ "test1", @ "test3", @ "test3", nil]; Je voulais rechercher "tes" disons alors que je voulais qu'un stuf joker fonctionne, que je ne pouvais pas comprendre, alors j'ai posé cette question, mais merci pour la réponse, apprécié
Filthy Knight
Vous pouvez soit parcourir et tester chaque valeur, soit consulter NSPredicate qui fournit une recherche assez complète d'objets de collection - presque aussi puissante que les clauses where SQL. developer.apple.com/mac/library/documentation/cocoa/Conceptual/…
JeremyP
45

Vous pouvez utiliser la classe NSPredicate pour rechercher des chaînes dans un tableau de chaînes. Consultez l'exemple de code ci-dessous.

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

C'est le moyen le plus efficace pour rechercher des chaînes dans un tableau de chaînes

Rashid
la source
cela fonctionne bien pour un petit tableau, mais si vous avez un très grand tableau (plus de 30k enregistrements), vous pouvez avoir une idée
amit gupta
Ensuite, gardez le tableau trié et utilisez une recherche binaire (bsearch) pour localiser et insérer de nouveaux éléments. NSArray / NSMutableArray ont des méthodes pour cela.
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
la source
Bien que cet extrait de code puisse répondre à la question, il est préférable d'inclure une explication de la façon dont il répond à la question afin que cette réponse soit utile aux futurs visiteurs du site
RobV
Ce morceau de code fonctionne très bien pour trouver le mot dans un tableau de mots.
Rahul K Rajan
Je veux faire cela avec le texte initial. Je veux dire que le texte de recherche doit être comparé à partir de n'importe où. S'il vous plaît aider
Gautam Shrivastav