2010-08-09 14 views
8

Lütfen NSMutableDictionary içinde aynı anahtar için birçok değere nasıl sahip olacağımı yazın? Benim durumumda son birNSMutableDictionary Objective-C programlamada birçok değeri tutan tek anahtarla

ile i aşağıda yaklaşım kullandığınızda, değerler ediliyor çünkü yerine geçer:

[dictionary setObject:forename forKey:[NSNumber numberWithint:code]]; 
[dictionary setObject:surname forKey:[NSNumber numberWithint:code]]; 
[dictionary setObject:reminderDate forKey:[NSNumber numberWithint:code]]; 

i sözlüğe içeriğini görüntülemek

i anahtar kodu için sadece reminderDate olsun. Buradaki kod tüm değerler için aynıdır. planlıReminder tarafından yerine geçmek için isim ve soyadı nasıl önlenir yardım et.

Eğer anahtar olarak code kullanıyor gibi görünüyor You

cevap

15

ederiz ve code göre birden değerleri temsil etmek istiyorum. Bu durumda yapmanız gerekir ya:

  1. Özet Tüm (belki Person adlandırılır) ayrı bir sınıfa code ilişkili veri ve sözlükte değerler olarak bu sınıfın örneklerini kullanın. sözlüklerin

  2. Kullanım birden fazla katman: Ne sözlükler nasıl çalıştığını anlamak sanmıyorum

    NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; 
    
    NSMutableDictionary *firstOne = [NSMutableDictionary dictionary]; 
    [firstOne setObject:forename forKey:@"forename"]; 
    [firstOne setObject:surname forKey:@"surname"]; 
    [firstOne setObject:reminderDate forKey:@"reminderDate"]; 
    
    [dictionary setObject:firstOne forKey:[NSNumber numberWithInt:code]]; 
    
    // repeat for each entry. 
    
+9

Sadece reddetme, neyin yanlış olduğunu öğrenmeme izin verebilmem için! – dreamlax

1

. Her tuşun sadece bir değeri olabilir. Sözlüklerin bir sözlüğüne veya dizilerin sözlüğüne sahip olmak isteyeceksiniz.

Burada her kişi için bir sözlük oluşturup bunu ana sözlüğünüzde saklıyorsunuz. Bir sözlükte nesneleri depolamak için gerçekten kararlılar ve dizeleri ile ilgileniyor eğer anahtarından nesneyi almak, her zaman sonra bir araya aralarına virgül koyarak dizeleri tüm ekleme ve olsaydı

NSDictionary *d = [NSDictionary dictionaryWithObjectsAndKeys: 
forename, @"forename", surname, @"surname", @reminderDate, "@reminderDate", nil]; 

[dictionary setObject:d forKey:[NSNumber numberWithint:code]]; 
5

, tüm nesnelerin bir quasi-csv formatında olacak! Daha sonra bu dizeyi bir dizi nesneye kolayca ayrıştırabilirsiniz. almak ve sözlükte nesneyi ayrıştırmak için daha sonra

NSString *forename = @"forename"; 
NSString *surname = @"surname"; 
NSString *reminderDate = @"10/11/2012"; 
NSString *code = @"code"; 

NSString *dummy = [[NSString alloc] init]; 
dummy = [dummy stringByAppendingString:forename]; 
dummy = [dummy stringByAppendingString:@","]; 
dummy = [dummy stringByAppendingString:surname]; 
dummy = [dummy stringByAppendingString:@","]; 
dummy = [dummy stringByAppendingString:reminderDate]; 
dummy = [dummy stringByAppendingString:@","]; 
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init]; 
[dictionary setObject:dummy forKey:code]; 

Ve: O sözlükleri tabakalara sahip kadar temiz olmayabilir

NSString *fromDictionary = [dictionary objectForKey:code]; 
NSArray *objectArray = [fromDictionary componentsSeparatedByString:@","]; 
NSLog(@"object array: %@",objectArray); 

İşte

kaçabilirsin bazı örnek kod Dreamlax'ın önerdiği gibi, ama bir anahtar için bir diziyi saklamak istediğiniz bir sözlükle uğraşıyorsanız ve bu dizideki nesnelerin belirli anahtarlarının kendileri yoktur, bu bir çözümdür!

+0

Neden sadece 'NSString * dummy = stringWithFormat: @ "% @,% @,% @", forename, soyad, reminderDate]; 'kullanmak değil. En azından, bu şekilde birleştirme yapıyorsanız, bir 'NSMutableString' kullanmalısınız. – dreamlax

1

Modern sözdizimi çok daha temiz.

Eğer yük anda statik bir yapıya inşa ediyorsanız

A.: (muhtemelen) gerçek zamanlı olarak ekleyerek ürün ise

NSDictionary* dic = @{code : @{@"forename" : forename, @"surname" : surnamem, @"reminderDate" : reminderDate}/*, ..more items..*/}; 

B.:

NSMutableDictionary* mDic = [[NSMutableDictionary alloc] init]; 
[mDic setObject:@{@"forename" : forename, @"surname" : surnamem, @"reminderDate" : reminderDate} forKey:code]; 
//..repeat 

Sonra bir şekilde erişmek 2D sözlük ...

mDic[code][@"forename"]; 
İlgili konular