2012-03-21 13 views
5

tengo este códigoparada NSDictionary de la clasificación de sus artículos

NSDictionary *tempDict = [NSDictionary dictionaryWithObjects: 
[NSArray arrayWithObjects:@"authorId","authorName","authorDescription",@"image",nil] forKeys: 
[NSArray arrayWithObjects:@"id",@"name",@"desc",@"image",nil]]; 
NSLog(@"%@",[tempDict description]); 

y la salida es

desc = authorDescription; 

id = authorId; 

image = image; 

name = authorName; 

Usted ve que el diccionario está ordenada por la clave, por orden alfabético, por alguna razón. Esto no es bueno para mí, porque necesito agregar este diccionario a un plist, y este plist ya tiene algunos diccionarios con teclas sin clasificar. Entonces, ¿cómo puedo evitar esta clasificación?

Respuesta

6

La clasificación se debe a [NSDictionary description], que es utilizado por NSLog. No es una característica fundamental de NSDictionary. Si accede a las teclas mediante enumeración rápida o [dictionary allKeys], no lo encontrará ordenado.

Pero para su pregunta subyacente, si lo que quiere es "desordenado" (al azar), entonces "ordenado" es solo una de las posibles secuencias aleatorias. Si realmente quieres ordenar, entonces ordenado no debería importar porque es un subconjunto.

Si la clasificación importa, entonces no quiere decir "sin clasificar", quiere decir "algún otro orden ordenado, como el orden de inserción". Si necesita que NSDictionary se ordene de alguna manera, debe imponerlo convirtiéndolo en NSArray.

+0

Estoy usando '[dataDict allKeys]' pero aun obtengo un orden aleatorio de mis claves. – upendra

+0

@upendra No entiendo la pregunta. No hay orden prometida para 'allKeys'. –

2

No está ordenado. Se muestra en un orden arbitrario. Agregue algunos elementos más y probablemente vea el cambio de orden.

(Es posible que, a nivel interno, el almacenamiento es, por alguna razón loca, en realidad ordenadas, pero no hay nada que pueda hacer al respecto.)

+0

ok, estoy escribiendo esta frase en plist, abriendo plist y este diccionario ordenado por clave (o en un orden arbitrario, no importa) en plist. No es aceptable para mí – user1248568

+0

Como dijo lulius, NSDictionary no está clasificando sus contenidos. NSDictionary es básicamente una tabla hash. Lo que ves ordenado es solo su resultado de impresión. Si agrega su 'tempDict' a otro diccionario, se agregarán los pares de clave/objetos y se guardarán en un orden particular (es decir, las partes internas de NSDictionary). O bien, puede intentar NSLogging su otro NSDictionary que se inicializó con su plist, aunque sus datos no están ordenados, su resultado de impresión también está ordenado ¿no? – nacho4d

Cuestiones relacionadas