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
, doğru mu? here den
Ö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];
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.
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 –
@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. –
aslında ObjC yolu yerine daha C/C++ yolunda yapıyorsunuz. –
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- 1. bir amaç-c projesi
- 2. Amaç C - Subclassing NSArray
- 3. Amaç-C parametreleri olarak geçirme
- 4. For ... ifadesi Amaç-C
- 5. Amaç C örnekleri aranan
- 6. Amaç C - UICollectionView
- 7. Amaç c boole değerleri
- 8. Referans belirsiz amaç-c
- 9. Amaç-C Kütüphanesi?
- 10. Amaç-C - Tanımsız semboller
- 11. Amaç-C - ENUMTYPE.ENUMVAL
- 12. Amaç C Gözlemleme/Yansıma
- 13. Amaç C @property Yorumlar
- 14. Amaç C: SHA1
- 15. Amaç C. Garip sözdizimi
- 16. Amaç-C enum hatası?
- 17. Amaç-c Öncelik Sırası
- 18. Amaç C - Sayılarla Array
- 19. Görüntü sabitleme kütüphanesi Amaç-C/C/C++?
- 20. Amaç-C kullanımı #import and devralma
- 21. Amaç C, özelleştirme UIButton, hata NSGenericException
- 22. Amaç c UIFont sistemiFontOfSize çalışmıyor
- 23. Amaç-c ayarlayıcı 2d-dizi
- 24. Amaç-C Güvenli Döküm Makrosu
- 25. artı (+) eksi karşı (-) amaç-c
- 26. CPP'nin Amaç C ile Entegrasyonu
- 27. Amaç-C yöntemi swizzling performansı
- 28. Amaç-C @available anahtar kelime
- 29. C + + Sınıfı Sınıf Üyesi Sınıfı
- 30. Amaç
, 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
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