2011-04-07 33 views
0

我想動態地添加一些值到NSMutableDictionary。但是,使用下面的代碼,我將使用的第一個字母爲重點,以一個臨時的字典中的值,然後最後將它添加到我的名字字典,但它只是將覆蓋其相應關鍵值不附加到我的NSMutableDictionary

NSMutableDictionary *dictionary = [[[NSMutableDictionary alloc] init] autorelease]; 
for (NSString *drugStr in listContents) { 
    NSString *substring = [drugStr substringToIndex:1]; 
    [dictionary setValue:drugStr forKey:substring];  
} 
names = [[NSDictionary alloc] initWithDictionary:dictionary]; 
[dictionary release]; 

每個值是什麼我做錯了嗎?

+1

你知道字典中的鍵必須是唯一的嗎?從代碼看來,如果你有兩個以listContents中的同一個字母開始的藥物,那麼第二個將會覆蓋第一個藥物的值。 – Yasser 2011-04-07 11:12:10

+0

你的意思是「它只是覆蓋每個值的相應鍵」?你是否試圖創建以特定字母開頭的所有值的數組? – 2011-04-07 11:12:23

+0

你能更清楚地知道你希望代碼做什麼,而不是「爲每個對應的鍵重寫每個值」?假設列表中包含「阿司匹林」,「撲熱息痛」,「芬特明」;你想在最後包含什麼'name',你取而代之的是什麼? – 2011-04-07 11:13:53

回答

0

你應該定義你的NSDictionary,使用NSString作爲鍵,NSArray作爲一個值。

然後你應該根據給定的關鍵值檢索你的值。如果結果爲零,那麼你需要創建一個新的NSMutableArray,你可以在其中添加上面的值。如果結果不爲零,則將該值添加到數組中。

NSMutableDictionary *dictionary = [[[NSMutableDictionary alloc] init] autorelease]; 
for (NSString *drugStr in listContents) { 
    NSString *substring = [drugStr substringToIndex:1]; 
    NSMutableArray *valueArray = (NSMutableArray*)[dictionary objectForKey:substring]; 
    if(valueArray==nil){ 
     NSMutableArray *newArray = [NSMutableArray arrayWithCapacity:5]; 
     [newArray addObject:drugStr]; 
     [dictionary setObject:newArray forKey:substring]; 
    }else{ 
     [valueArray addObject:drugStr]; 
    } 

} 
names = [[NSDictionary alloc] initWithDictionary:dictionary]; 
[dictionary release]; 
+0

感謝您的回覆,代碼正常工作,但添加後,我的應用程序顯着減慢,您能看到爲什麼嗎? – user616076 2011-04-07 13:22:27

+0

您在創建字典時是否遇到了放緩問題,或者您還沒有預料到其他放緩嗎?此方法在函數運行時確實分配了一些可變數組,但不會導致問題。你的xcode profiler說什麼? – Tovi7 2011-04-07 13:27:00

+0

如果我註釋掉應用程序運行良好的代碼,雖然我不明白爲什麼它會導致它的效果。就我所知,我沒有使用Xcode Profiler,我假設它在Debugger中。 – user616076 2011-04-07 14:00:13

相關問題