Pregunta

Esto parece una pregunta tan estúpida, pero ¿cómo puedo encontrar una cadena en un NSArray ?

Intenté usar

[array indexOfObjectIdenticalTo:myString]

pero eso requiere que la picadura tenga la misma dirección.

¿Alguien tiene algún consejo sobre cómo hacer esto?

¿Fue útil?

Solución

Desea el indexOfObject: method , que busca el objeto enviando a cada objeto de la matriz un mensaje isEqual: .

Otros consejos

La respuesta de Peter es correcta.

Una nota adicional; si tiene toneladas y toneladas de cadenas en la matriz, -indexOfObject: hará una búsqueda lineal. Esto puede ser un cuello de botella de rendimiento para el que debería considerar usar un contenedor diferente; un NSSet o NSDictionary, posiblemente (dependiendo del significado de las cadenas).

Otro problema es si las cadenas son todas relativamente similares y / o relativamente largas.

Por supuesto, no se moleste en optimizar nada hasta que haya utilizado las herramientas de análisis para demostrar que tiene un problema de rendimiento.

Puede usar NSOrderSet como contenedor, la vista general en NSOrderedSet Class Reference se encuentra a continuación:

  

NSOrderedSet y su subclase, NSMutableOrderedSet, declaran las interfaces programáticas a una colección ordenada de objetos.

     

NSOrderedSet declara la interfaz programática para conjuntos estáticos de objetos distintos. Usted > establece las entradas de un conjunto estático cuando se crea, y posteriormente las entradas no pueden modificarse. NSMutableOrderedSet, por otro lado, declara una interfaz programática para > conjuntos dinámicos de objetos distintos. Un conjunto dinámico & # 8212; o mutable & # 8212; permite agregar y eliminar > de entradas en cualquier momento, asignando memoria automáticamente según sea necesario.

     

Puede usar conjuntos ordenados como una alternativa a las matrices cuando el orden de los elementos es importante > y el rendimiento al probar si un objeto está contenido en el conjunto es una consideración & # 8212; > la prueba de membresía de una matriz es más lenta que la prueba de membresía de un conjunto.

Visite http: // desarrollador. apple.com/library/mac/#documentation/Foundation/Reference/NSOrderedSet_Class/Reference/Reference.html

containsObject:

Devuelve un valor booleano que indica si un objeto dado está presente en la matriz.

  • (BOOL) contiene Objeto: (id) unObjeto Parámetros un objeto Un objeto.

Valor de retorno SÍ si un objeto está presente en la matriz, de lo contrario NO.

Discusión

Este método determina si anObject está presente en la matriz enviando un mensaje isEqual: a cada uno de los objetos de la matriz (y pasando un objeto como parámetro a cada mensaje isEqual:).

Declarado en

NSArray.h

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top