¿Cuál es la diferencia entre un diccionario y una matriz, especialmente cuando se trabaja con archivos PLIST? ¿Cuáles son las ventajas de usar una sobre la otra? ¡Gracias!¿Cuál es la diferencia entre un diccionario y una matriz?
Respuesta
Ambos NSDictionary
y NSArray
son clases de colección, es decir, el grupo junto con otros objetos.
Una NSArray es una 'colección ordenada': cada elemento de la colección tiene un índice entero, por lo que hay un orden explícito para los artículos. Si intercambia el orden de los artículos en la colección, entonces la colección ya no es la 'misma' ya que el orden es diferente. Un objeto puede aparecer más de una vez en la colección.
Un NSSet es una "colección no ordenada": cada artículo aparece en una bolsa, el orden no importa y un objeto solo puede existir una vez en la bolsa.
Un NSDictionary es una 'colección indexada': cada elemento de la colección tiene una clave y se puede recuperar con esa clave. Un objeto puede aparecer más de una vez, en el que diferentes teclas pueden apuntar al mismo objeto, pero una tecla solo puede aparecer una vez. Un diccionario también es una forma de 'tabla hash' si tiene antecedentes en informática.
Al analizar PLIST, las matrices y los diccionarios son los tipos principales con los que trata. Cuando edita un PLIST en Xcode, si establece algo como un tipo de matriz, todos sus elementos secundarios se enumeran como "elemento 0, elemento 1, elemento 2 ...", mientras que si lo configura como un tipo de diccionario, entonces es los niños son clave: pares de valores.
Un caso de uso significativo para los tipos de diferencia es el siguiente.
Imagine una aplicación de revista que contiene una serie de artículos. El orden de los artículos es importante, por lo que almacenaría cada artículo en una matriz. Si quisiera cambiar el orden de los artículos, cambiaría el orden de la matriz en el plist.
Los artículos mismos pueden estar representados por Diccionarios, que quizás contengan claves como "TextFile", "Background", "ArticleType". Utiliza un diccionario porque puede agregar más información al diccionario en algún momento en el futuro, y el mecanismo de clave: valor hace que su código sea comprensible.
Una matriz es solo una lista ordenada de objetos. Un diccionario almacena pares clave-valor.
Por ejemplo:
Array: obj1, obj2, ob3, ...
Diccionario:
{
@"Name": @"Bob"
@"Age": 20 (but NSDictionary can only store objects, so that would be a NSNumber)
}
No hay ventajas o desventajas, que son sólo dos estructuras de datos, y utilizan el que necesita.
Los diccionarios asocian una clave con un valor (objeto) y no conservan el orden de los elementos. El acceso a la matriz se realiza por índice: la orden se conserva. PLIst agrega la habilidad use use XML para definir los datos (clave, pares de valores).
NSDictionary no conserva sus objetos de 'valor', pero un NSMutableArray retiene los objetos que se le agregan. Para obtener más información NSDictionary y NSArray
Esto es incorrecto: NSDictionary conserva sus valores, pero no sus claves. – ikuramedia
La diferencia clave es cómo puede acceder dentro de ellos.
Tanto las matrices como los diccionarios son contenedores y se pueden leer secuencialmente (por ejemplo, las matrices se pueden enumerar por medio de un índice y diccionarios mediante una clave). Pero mientras las matrices mantienen el orden entre los objetos, los diccionarios no.
Además, con los diccionarios tiene la posibilidad de acceder a un objeto específico con una clave específica de una manera más fácil de usar (una mnemónica). Por ejemplo, en un diccionario seguro que con una clave específica, por ejemplo "texto", se asocia un objeto específico, digamos NSString
. Lo mismo podría ser válido para una matriz pero con algunas dificultades. Por ejemplo, ¿cómo está seguro de que en el índice 0 existe el objeto específico NSString
?
Acerca de su pregunta y hasta donde yo sé (desde Xcode 4), los plist tienen como objeto raíz un diccionario. Para más información, vea how-do-you-change-a-plists-root-object-type-to-nsarray-in-xcode-4.
Espero que ayude.
NSDictionary es útil cuando desea acceder a un valor clave particular. NsArray es útil cuando desea acceder a datos de sequntial.
- 1. ¿Cuál es la diferencia entre una matriz y un objeto?
- 2. ¿Cuál es la diferencia entre dict() y {}?
- 3. ¿Diferencia entre un objeto y un diccionario?
- 4. Diferencia entre diccionario y Hashtable
- 5. ¿Cuál es la diferencia entre una mónada y un cierre?
- 6. ¿Cuál es la diferencia entre un RoutedCommand y una RoutedUICommand?
- 7. ¿Cuál es la diferencia entre un hilo y una fibra?
- 8. ¿Cuál es la diferencia entre un algoritmo y una función?
- 9. ¿Cuál es la diferencia entre una instancia y un objeto?
- 10. ¿Cuál es la diferencia entre un tema y una plantilla?
- 11. ¿Cuál es la diferencia entre una heurística y un algoritmo?
- 12. ¿Cuál es la diferencia entre un método y una función?
- 13. ¿Cuál es la diferencia entre .ToString (+) y ""
- 14. ¿Cuál es la diferencia entre ".equals" y "=="?
- 15. ¿Cuál es la diferencia entre {0} y ""?
- 16. ¿Cuál es la diferencia entre "$^N" y "$ +"?
- 17. Cuál es la diferencia entre = y: =
- 18. ¿Cuál es la diferencia entre una subrutina y una función?
- 19. ¿cuál es la diferencia entre una clase y una biblioteca?
- 20. ¿Cuál es la diferencia entre " " y ""?
- 21. ¿cuál es la diferencia entre:.! y: r !?
- 22. ¿Cuál es la diferencia entre [indefinido] y [,]?
- 23. Cuál es la diferencia entre $ (...) y `...`
- 24. ¿Cuál es la diferencia entre `##` y `hashCode`?
- 25. ¿Cuál es la diferencia entre + = y = +?
- 26. Cuál es la diferencia entre $ y jQuery
- 27. ¿Cuál es la diferencia entre un lenguaje y un marco?
- 28. ¿Cuál es la diferencia entre un ayudante y un parcial?
- 29. ¿Cuál es la diferencia entre una vista y una secuencia?
- 30. ¿Cuál es la diferencia entre una sesión y una cookie?
¡Muchas gracias por explicar esto! Realmente ayudó. –
Gracias. Me salvó el tiempo. – Raja