2010-08-20 18 views
9

C# 's KeyValuePair benzer (örneğin, jenerik olmadan) Objective C'de bir sınıf arıyorum. Sadece bir birinci/ikinci nesneyi olan her şey. Hiç sorunum olmadan kendi başımı oluşturabilirim, ama zaten var ise, tekerleği yeniden icat etmeye gerek olmadığını anlarım. Kendimi bulmakta hiç şansım olmadı ... Kimse biliyor mu? Yani temelde bir HashMap gibiAmaç C - KeyValuePair sınıfı?

cevap

11

, doğru mu? here den

Use NSMutableDictionary

Örnek:

NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init]; 

// Add objects to a dictionary indexed by keys 

[dictionary setObject:@"A Book about the Letter A" forKey:@"A"]; 
[dictionary setObject:@"A Book about the Letter B" forKey:@"B"]; 
[dictionary setObject:@"A Book about the Letter C" forKey:@"C"]; 

// Retrieve an object from a dictionary with a key 

NSLog([dictionary objectForKey:@"B"]); 

// Release a dictionary 

[dictionary release]; 
+8

, fakat sadece tek bir örneği (HashMap/Sözlük birden fazla tuşa/değerlerini içerir). Sadece bir anahtar/değer olan bir sınıf arıyorum. – Kyle

+3

Kendi "çift" sınıfınızı oluşturmayı düşünebilirsiniz. Alternatif olarak, NSMutableDictionary alt sınıfını alt sınıflara ayırabilir ve bir kerede alt sınıftaki sözlüğünüzde yalnızca bir çift nesnenin kuralını uygulayabilirsiniz. Bir standart "NSPair" nesnesi olmaması garip görünüyor ... – PixelCloudSt

1

Ne düz C yapılar kullanmaya ne dersiniz? Bütün bir sınıfı yazmaktan daha "hızlı".

typedef struct KeyValuePair { 
    const char *key; 
    const char *value; 
} KeyValuePair; 

//init like this 
KeyValuePair kvp = {"yourkey", "yourvalue"} 

göz önünde bulundurulması için:

  • Yapılar

    değer geçirilir.
  • ARC, ObjC nesnelerini yapıları kullanarak engeller ancak C ilkelleri hala desteklenmektedir.
  • Sen objc toplama sınıfları (NSArray, NSDictionary, vs) için yapılar ekleyemezsiniz.
+0

Maalesef C struct ARC ile iyi çalışmıyor ve bunları NSArray/NSDictionary ve diğer pek çok yere koyamazsınız. neredeyse işe yaramaz –

+0

@BryanChen doğru, ama oluşturmak ve tüm sınıf oluşturmak zorunda kalmadan geçmek için bir tür konteyner gerekiyorsa, o zaman yapılar hala yararlı olabilir. ARC, ObjC nesnelerini yapılarla kullanmayı engeller ancak C ilkelleri hala desteklenmektedir. –

+1

aslında ObjC yolu yerine daha C/C++ yolunda yapıyorsunuz. –

3

Nasıl basit bir NSArray hakkında?

NSArray* kvp = [NSArray arrayWithObjects: key, value, nil]; 
// or, using boxed literals, 
NSArray* kvp = @[key, value]; 
... 
NSObject* key = [kvp firstObject]; 
NSObject* value = [kvp lastObject]; 
Bir fonksiyon +arrayWithObjects: sarın (ve basit bir yaklaşım çelme verecek bir nil anahtar veya değerin olaya el) muhtemelen daha hızlı olacak bir NSArray unsurlarını erişme

yapacağı

NSDictionary.

Bunun gibi