2013-01-24 24 views
5

NSDictionary'a nesne eklediğim yolu nasıl koruyabilirim?Sipariş NSDictionary

NSDictionary numaralı değerler için belirli bir sıralamanın olmadığını anlıyorum, ancak benim durumumda, bir dizi gibi setValue:forKey: kullanarak eklediğim sıralamayı korumam gerekiyor.

Bunu nasıl yapabilirim?

Herhangi bir yardım için teşekkür ederiz.

cevap

2

Sözlük, daha hızlı alınabilmesi için eşleştirilmiştir. Siparişini düzeltmene izin verilmez.

Sırayla depolamak isterseniz dizileri kullanmalısınız.Ya da karmaşık bir şekilde kullanmanız gerekiyorsa, anahtarla int orderNumber (her setObject/setValue'dan sonra eklemelisiniz) eklemeye devam edin. depolama ve geri alma konusunda:


NSDictionary *dict=[NSDictionary new]; 
NSString *key=....; 
[dict setValue:@"some value" forKey:[NSString stringWithFormat:@"%d-%@",orderNumber, key]]; 
Alternatif dizine başına bir sözlüğü sahip bir dizi kullanabilirsiniz. Bir yıl önce yayınlanmıştır ne çok benziyor Bulunan

, bu OrderedDictionary bkz:


bir başka yolu

@interface .... 
    @property(...) NSInteger index; 
    @property(...) NSString *key; 
    @property(...) id object; 
    // and methods to retrieve based on key, based on index etc 
@end 

EDIT'e 2 olarak özel bir sınıf kullanmak olacaktır. Böyle

+0

Dizileri kullanabileceğimin farkındayım, ancak NSArray'ın izin vermediği bir şeyi hem Anahtarları hem Değerleri depolamalıyım. –

+0

Evet Biliyordum, Şimdi cevabımı güncelledim .. –

0

şey:

static int index; 
[myDictionary setValue:someValue forKey:[NSString stringWithFormat:@"key%d", index++]]; 
0

Sen gerekir ya:

  • Track eklediğiniz sırada, anahtarların bir dizi sürdürerek ayrı sırası.
  • Siparişi, sözlüğünde sakladığınız nesnenin bir özniteliği olarak ekleyin.

Tüm bilgileri tek bir yerde sakladığından ikinci yaklaşımı tercih ederim. Depolamadığınız nesne sizin tarafınızdan tanımlanmadıysa, o nesnenin alt sınıfını oluşturmanız veya ek numaralı siparişle kendi nesnelerinizden birinde saklamanız gerekebilir.