2010-03-10 37 views
10

Kakao, temel olarak ilişkilendirici bir dizidir NSDictionary sağlar.İki Yönlü Harita Kakao içinde

çift yönlü çağrışımsallık almak için güzel bir yolu var mı? NSDictionary objectForKey: davranışını yansıtılmış bir keyForObject: yöntem olsaydı, yani tek yönlü olurdu.

NSDictionary bu almanın yolu değilse gerçekten umurumda değil. NSDictionary 'un'un keysOfEntriesPassingTest: numarasını sağladığını biliyorum, ancak sahip olmak istediğim şey için çok temiz görünmeyen bir NSSet * döndürüyor.

fieldMap = [[NSDictionary alloc] initWithObjectsAndKeys: 
    @"c0",@"synckey", 
    @"c1",@"wi_id", 
    @"c2",@"wi_parent_id", 
    @"c3",@"wi_type", 
    @"c4",@"wi_rh_task", 
    @"c5",@"decision_key", 
    @"c6",@"wi_stat", 
    @"c7",@"wi_prio", 
    @"c8",@"wi_cd", 
    @"c9",@"wi_ct", 
    @"cb",@"wi_dh_stat", 
    @"cc",@"wi_user", 
    nil]; 

Ben diğer alanlar için c0 ila synckey ve sırt ve ditto çevirmek istiyorum: Burada

bir örnektir.

cevap

10

Yaptıklarınız için en yakın şey, allKeysForObject:. Bu, sözlükte belirli bir nesnenin tüm oluşumlarına karşılık gelen anahtarları içeren bir NSArray öğesini döndürür. Açıkça, nesne sözlüğünde yalnızca bir kez bulunuyorsa, NSArray yalnızca bir nesne içerecektir. Kenara

NSArray *keyArray = [fieldMap allKeysForObject:@"wi_prio"]; 

[: Bu ek kod @ "c7" için değerlendirilmesi 1 dize nesnesini içeren bir dizi dönecekti

fieldMap = [[NSDictionary alloc] initWithObjectsAndKeys: 
    @"c0",@"synckey", 
    @"c1",@"wi_id", 
    @"c2",@"wi_parent_id", 
    @"c3",@"wi_type", 
    @"c4",@"wi_rh_task", 
    @"c5",@"decision_key", 
    @"c6",@"wi_stat", 
    @"c7",@"wi_prio", 
    @"c8",@"wi_cd", 
    @"c9",@"wi_ct", 
    @"cb",@"wi_dh_stat", 
    @"cc",@"wi_user", 
    nil]; 

: En örnekle Yani

unutmayın bu olur sadece eser Burada derleyici nasıl çalıştığı için; @ "wi_prio" nun tüm oluşumlarını alır ve aynı nesneyi yapar. Bunun yerine belki de sözlüğü diskten yüklediyseniz, bu yaklaşım NSStrings için çalışmaz. Bunun yerine, muhtemelen allKeys'u kullanmalı ve daha sonra bunları [mystring isEqualToString:anotherString] ile karşılaştırarak yinelemeniz gerekir.

İlgili konular