2010-08-09 66 views
8

請告訴我如何讓NSMutableDictionary中的同一個鍵具有多個值? 因爲當我使用下面的方法,這些值是替換最近一個在Objective-C編程中單鍵保存多個值的NSMutableDictionary

在我的情況:

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

時,我認爲詞典的內容,我只得到了關鍵代碼reminderDate。這裏的代碼對於所有值都是相同的。幫助我如何避免名稱和姓氏被計劃提醒取代。

謝謝

回答

15

好像你正在使用code爲重點,並要代表基於code多個值。在這種情況下,你應該:

  1. 摘要與code結合成一個單獨的類(也許叫Person)的所有數據,並使用這個類的實例作爲在字典中的值。

  2. 使用一個以上的字典層:

    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

不要只是downvote,讓我知道什麼是錯的,以便我可以修復它! – dreamlax 2014-06-20 09:29:10

1

我不認爲你明白的字典是如何工作的。每個鍵只能有一個值。你會想要一個字典詞典或數組字典。

在這裏,您爲每個人創建一本字典,然後將其存儲在您的主字典中。

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

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

如果你真的堅定的關於在字典存儲對象,如果你正在處理字符串,你總是可以添加您的所有字符串用逗號在一起分開的,然後當你從鍵檢索對象,你將擁有準csv格式的所有對象!然後,您可以輕鬆地將該字符串解析爲一個對象數組。

下面是一些示例代碼,你可以運行:

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]; 

然後去檢索和分析對象在詞典:

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

它可能不是那樣乾淨有字典的層像dreamlax建議的那樣,但是如果你正在處理一個字典,你想爲一個鍵存儲一個數組,而且該數組中的對象本身沒有特定的鍵,這是一個解決方案!

+0

爲什麼不簡單地使用'NSString * dummy = stringWithFormat:@「%@,%@,%@」,forename,surname,reminderDate];'。至少,你應該使用'NSMutableString',如果你是以這種方式連接的話。 – dreamlax 2013-10-04 16:20:06

1

現代語法更清潔。

答:如果您正在構建在加載時的靜態結構:

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 

然後你訪問的2D字典...

mDic[code][@"forename"]; 
相關問題