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?


É 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

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


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


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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.