2012-02-23 39 views

Respuesta

31

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.

+0

¡Muchas gracias por explicar esto! Realmente ayudó. –

+0

Gracias. Me salvó el tiempo. – Raja

4

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.

2

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).

-2

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

+1

Esto es incorrecto: NSDictionary conserva sus valores, pero no sus claves. – ikuramedia

4

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.

-1

NSDictionary es útil cuando desea acceder a un valor clave particular. NsArray es útil cuando desea acceder a datos de sequntial.

Cuestiones relacionadas