2012-03-21 21 views
5

Bu koduDur NSDictionary

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

sahip ve çıkış Sen Sözlük nedense alfabetik anahtarın göre sıralanır görüyoruz

desc = authorDescription; 

id = authorId; 

image = image; 

name = authorName; 

olduğunu. Bu benim için iyi değil, çünkü bu sözlüğü bir plist'e eklemem gerekiyor ve bu plist zaten sıralanmamış anahtarlarla bazı sözlüklere sahip. Peki bu sıralamadan nasıl kaçınabilirim?

cevap

6

sıralama NSLog tarafından kullanılır [NSDictionary description], kaynaklanmaktadır. Bu, NSDictionary'un temel bir özelliği değildir. Tuşlara hızlı numaralandırma veya [dictionary allKeys] aracılığıyla erişirseniz, sıralamayı bulamazsınız. ne istediğini "sıralanmamış" (rastgele) ise

Ama altta yatan sorunun

, sonra sadece olası rasgele dizilerin biridir "sıralanmış". Eğer gerçekten sıralanmamış istiyorsanız, o zaman bir alt kümesi olduğu için sıralanmalıdır. konularda sıralama, o zaman demek yoksa

"sıralanmamış," siz "Böyle kampanya siparişinde gibi diğer bazı sıralanmış sırası," demek. Bir şekilde sıralanmak için NSDictionary'a ihtiyacınız varsa, bunu NSArray'a dönüştürerek bunu dayatmanız gerekir. plist - (farketmez veya keyfi bir sırayla)

+0

Ben [dataDict allKeys] 'i kullanıyorum ama hala anahtarlarımın rasgele sıralamasını alıyorum. – upendra

+0

@upendra Soruyu anlamıyorum. AllKeys için söz verilen emir yok. –

2

O sıralanmış değil. O keyfi bir sırada görüntüleniyor. Daha fazla öğe ekle ve muhtemelen sipariş değişikliğini göreceksiniz.

(O içten, depolama, bazı deli nedenle, aslında sıralanır Bunun mümkün olduğunu, ancak bu konuda yapabileceği bir şey yok.)

+0

Tamam, ben plist bu dicti yazma plist açıp anahtarla göre sınıflandırılmaktadır bu sözlüğü ediyorum. Benim için kabul edilebilir değil – user1248568

+0

lulius dediği gibi, NSDictionary içeriğini sıralamıyor. NSDictionary temelde bir karma tablosu. Gördüğünüz şey sadece baskı sonucu. Başka bir sözlük nesneler için 'tempDict' eklerseniz /anahtar çiftleri eklenecek ve onlar (o NSDictionary internal'leri olan) özel bir sırada saklanacaktır. Alternatif olarak, veri sonucunu kendi baskı dizildi değil çok doğru sıralanır bile, sizin plist kullanılarak başlatıldı diğer NSDictionary NSLogging deneyebilirsiniz? – nacho4d