Pesquisa de string na matriz de string no objetivo c

87

Quero pesquisar uma string específica na matriz de strings no objetivo c. Alguém pode me ajudar nesse sentido?

Cavaleiro Sujo
fonte
É sua lição de casa? Acho que é fácil de fazer. Por que apenas fazer um loop e comparar?
vodkhang de
na, não é tarefa de casa, eu precisava do melhor algoritmo para pesquisar uma string específica que não custava muitos recursos no iphone, é por isso que coloquei a pergunta
Filthy Knight
possível duplicata de Objective-C Search NSArray for String?
Nielsbot

Respostas:

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

ou se você precisa saber onde está

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

Eu recomendo fortemente que você leia a documentação sobre NSArray . É melhor fazer isso antes de postar sua pergunta :-)

JeremyP
fonte
Digamos que eu tenha um array contendo NSArray * myArr = [[NSArray alloc] initWithObjects: @ "test1", @ "test3", @ "test3", nil]; eu queria pesquisar "tes", digamos então que eu queria que um curinga funcionasse, que eu não conseguia entender, então fiz esta pergunta, mas obrigado pela resposta, apreciado
Filthy Knight
Você pode fazer um loop e testar cada valor ou examinar o NSPredicate, que fornece uma pesquisa bastante abrangente de objetos de coleção - quase tão poderosa quanto as cláusulas where do SQL. developer.apple.com/mac/library/documentation/cocoa/Conceptual/…
JeremyP
45

Você pode usar a classe NSPredicate para pesquisar strings em um array de strings. Veja o código de exemplo abaixo.

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

Esta é a maneira mais eficiente de pesquisar strings em uma série de strings

Rashid
fonte
isso funciona bem para uma matriz pequena, mas se você tiver uma matriz muito grande (mais de 30 mil registros), você pode ter alguma ideia
amit gupta
Em seguida, mantenha a matriz classificada e use uma pesquisa binária (bsearch) para localizar e inserir novos elementos. NSArray / NSMutableArray tem métodos para isso.
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
fonte
Embora este snippet de código possa responder à pergunta, é melhor incluir uma explicação de como ele responde à pergunta para que esta resposta seja útil para futuros visitantes do site
RobV
Este trecho de código funciona bem para localizar a palavra em uma série de palavras.
Rahul K Rajan
Eu quero fazer isso com o texto inicial. Quero dizer, o texto de pesquisa precisa ser correspondido do início, não de qualquer lugar. Por favor, ajude
Gautam Shrivastav