2009-07-29 16 views
15

¿Cuál es la diferencia?NSMutableSet vs NSMutableArray

En mi contexto, necesito poder agregar y quitar objetos dinámicamente. El usuario hace clic en las filas de una tabla que se activa y desactiva y, por lo tanto, agrega o elimina el objeto al que se hace referencia de la lista.

Una conjetura salvaje es que la matriz tiene elementos indexados mientras que el conjunto no tiene índices?

+0

¡Gracias por los comentarios! – Brenden

+1

Asegúrese de votar las respuestas que lo ayudaron, en lugar de dejar un comentario. – amattn

Respuesta

29

Un NSSet/NSMutableSet no guarda los artículos en ningún orden en particular. Un NSArray/NSMutableArray almacena los artículos en un orden particular. Si está creando una vista de tabla, definitivamente debe usar una matriz como su fuente de datos de elección.

+0

Además, si el orden es irrelevante y usted frecuentemente pregunta si un elemento en particular pertenece al grupo o no, es mucho más eficiente usar 'NSSet' en lugar de' NSArray'. – GoRoS

23

Además, NSMutableSet se asegura de que todos los objetos sean únicos.

NSMutableArray va bien con UITableView ya que los elementos tienen índice, por lo que puede devolver [array count] para obtener el número de filas de la tabla, o [array objectAtIndex: rowNumber] para asociar fácilmente elemento con fila.

+0

Esto es algo de lo que no me había dado cuenta – Brenden

3

Además, de acuerdo con the documentation, las pruebas de pertenencia a objetos son más rápidas con los NSSets.

Puede utilizar conjuntos como una alternativa a las matrices cuando el orden de elementos no es importante y el rendimiento en las pruebas de si un objeto está contenido en el conjunto es una consideración-mientras que las matrices están ordenados, pruebas para la membresía es más lenta que con los conjuntos.

0

Bueno, hay 3 diferencias principales. 1) Los conjuntos no están ordenados 2) No tienen un índice & 3) No se pueden tener valores duplicados donde se ordenan las matrices, el índice & puede almacenar valores duplicados.