Como encontrar uma string em um nsarray?
Pergunta
Parece uma pergunta tão estúpida, mas como posso encontrar uma corda em um NSArray
?
Eu tentei usar
[array indexOfObjectIdenticalTo:myString]
Mas isso exige que a picada tenha o mesmo endereço.
Alguém tem alguma dica sobre como fazer isso?
Solução
Você quer a indexOfObject:
método, que procura o objeto enviando cada objeto na matriz e isEqual:
mensagem.
Outras dicas
A resposta de Peter está correta.
Uma nota adicional; Se você tem toneladas e toneladas de cordas na matriz, -indexOfObject:
vai fazer uma pesquisa linear. Isso pode ser um gargalo de desempenho para o qual você deve considerar usar um contêiner diferente; um nsset ou nsdictionary, possivelmente (dependendo do que as cordas significam).
Outro Gotcha é se as cordas são relativamente semelhantes e/ou relativamente longas.
Obviamente, não se preocupe em otimizar nada até que você tenha usado as ferramentas de análise para provar que você tem um problema de desempenho.
Você pode usar o nsorderset como contêiner, a referência de classe Over -the Over na classe NSORDEDEDSET está abaixo:
O NSORDEDEDSET e sua subclasse, NSMutableOrderedSet, declaram as interfaces programáticas para uma coleção ordenada de objetos.
O NSORDEDSET declara a interface programática para conjuntos estáticos de objetos distintos. Você> estabelece as entradas de um conjunto estático quando é criado e, posteriormente, as entradas não podem ser modificadas. O NSMutableOrderedSet, por outro lado, declara uma interface programática para> conjuntos dinâmicos de objetos distintos. Um conjunto dinâmico - ou mutável - permite a adição e a exclusão de entradas a qualquer momento, alocando automaticamente a memória conforme necessário.
Você pode usar conjuntos ordenados como uma alternativa às matrizes quando a ordem dos elementos é importante> e o desempenho no teste se um objeto está contido no conjunto é uma consideração -> testes para a participação de uma matriz é mais lenta do que o teste para a associação de um conjunto .
ContainsObject:
Retorna um valor booleano que indica se um determinado objeto está presente na matriz.
- (Bool) containsObject: (id) parâmetros do anobject e um objeto.
Valor de retornoSim, se o AnoBject estiver presente na matriz, caso contrário, não.
Discussão
Este método determina se o AnoBject está presente na matriz enviando uma mensagem ISEqual: para cada um dos objetos da matriz (e passando o anobject como o parâmetro para cada um ISequal: mensagem).
Declarado em
Nsarray.h