NSMutableArray *sectionTitles;
[sectionTitles addObject:due];
¿Cómo puedo agregar valores únicos a una matriz?¿Cómo puedo hacer que NSMutableArray solo acepte valores únicos?
NSMutableArray *sectionTitles;
[sectionTitles addObject:due];
¿Cómo puedo agregar valores únicos a una matriz?¿Cómo puedo hacer que NSMutableArray solo acepte valores únicos?
Véase la respuesta de Rudolph
Mi viejo respuesta a continuación se ha quedado desfasado y ha sido durante un tiempo. La referencia de rudoph a NSOrderedSet
/NSMutableOrderedSet
es el correcto ya que estas clases se añadieron después de este Q y mi A.
respuesta Antiguo
Como dijo Richard, NSMutableSet
funciona bien, pero sólo si no es necesario mantener una colección ordenada Si hace necesitan una colección ordenada de una simple comprobación de contenido es lo mejor que puede hacer:
if (![myMutableArray containsObject:newObject])
[myMutableArray addObject:newObject];
Actualización basada en comentario
Usted puede envolver esto en un método como -addUniqueObject:
y lo puso en un NSMutableArray category.
@Yar: Es una gran suposición que usted llegó allí. NSMutableSet ciertamente no es la "clase correcta" si desea mantener una colección * ordenada * (sin agregar una propiedad adicional a los objetos de modelo que desea contener en el conjunto solo para ordenar por). –
@Joshua Nozzi, buen punto, si necesita ordenar, necesita una matriz. –
Puede usar ambos, 'NSMutableSet' para consultas de membresía eficientes y' NSMutableArray' para mantener el orden de inserción. Debería ser fácil encapsular ambos en una sola clase "OrderedSet" (si se dirige a Lion, ya existe 'NSOrderedSet' para este fin). – omz
Más respuesta 2012-ish (en caso de que alguien se topó con esto en el futuro):
Uso NSOrderedSet
y NSMutableOrderedSet
.
Una nota sobre el desempeño adecuado de NSOrderedSet
docs:
Puede utilizar conjuntos ordenados como una alternativa a las matrices cuando el orden de los elementos es importante y el rendimiento en las pruebas de si un objeto está contenido en el conjunto es una consideración- las pruebas de membresía de una matriz son más lentas que las pruebas de membresía de un conjunto.
Buena actualización. :-) –
Además, como nota adicional: no es posible crear una subclase de NSMutableArray para agregar esta funcionalidad, ya que NSMutableArray es un llamado cluster de clases: cuando haces '[[NSMutableArray alloc] init]' (o cualquier variación), no obtendrá una instancia de NSMutableArray sino de una clase concreta que implemente la misma interfaz. – DarkDust
Para eso están las categorías. :-) Tengo una categoría para -addUniqueObject: en NSMutableArray. http://developer.applecom/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Articles/OcCategories.html # // apple_ref/doc/uid/TP30001163-CH20-SW1 –
Consulte la respuesta de Rudolf a continuación para obtener un enfoque más moderno que no existía en ese momento Yo respondí esto. –