2015-04-20 65 views
2

我有一個名爲NSMutableArray動物。我需要創建一個NSMutableDictionary使得動物陣列中的所有名字都Keys與特定的第一個字母= Values開始。NSMutableDictionary setValue:/ forKey:?

這是動物的數組:

NSMutableArray *animals = [NSMutableArray arrayWithObjects:@"Bear", @"Black Swan", @"Buffalo", @"Camel", @"Cockatoo", @"Dog", @"Donkey", @"Emu", @"Giraffe", @"Greater Rhea", @"Hippopotamus", @"Horse", @"Koala", @"Lion", @"Llama", @"Manatus", @"Meerkat", @"Panda", @"Peacock", @"Pig", @"Platypus", @"Polar Bear", @"Rhinoceros", @"Seagull", @"Tasmania Devil", @"Whale", @"Whale Shark", @"Wombat", nil]; 

這是我的代碼,將其設置爲MutableDictionary

for(NSString *str in animals) { 
    NSString *firstLetter = [str substringToIndex:1]; 
    NSArray *newArr = [NSArray arrayWithObject:str]; 
    [myMutableDictionary setValue:newArr forKey:firstLetter]; 
} 

的問題是,每個鍵只有一個值設置,但我需要所有對象都具有相同值的第一個字母。例如。值='b' - > @「熊」,@「黑天鵝」,@「布法羅」。

+1

只是要清楚......你只需要通過名稱的第一個字母或分組你需要在實現代碼如下類似的索引他們的第一個字母? – Alladinian

+1

對於初學者[NSDictionary setValue:forKey]不會像你認爲的那樣工作。查看關於這個的文檔。它將爲一個關鍵字設置一個值,完全匹配該值。你將需要使用類似NSPredicate的東西來找到所有匹配的值並獲得一個子集數組,你可以將它複製到一個NSDictionary中。 –

+0

@Alladinian像索引中的tableview – Sattar

回答

6

嘗試

for (NSString *str in animals) { 
    NSString *firstLetter = [str substringToIndex:1]; 
    if(!myMutableDictionary[firstLetter]) 
    { 
     myMutableDictionary[firstLetter] = [NSMutableArray new]; 
    } 
    NSMutableArray *arr = myMutableDictionary[firstLetter]; 
    [arr addObject:str]; 
} 
+0

感謝。完美地工作,你能解釋它的工作原理嗎? – Sattar

0

下面是滿足您的要求的代碼。

步驟1:分配NSMutableDictionary

第2步:分析NSArray,初步檢查是否有可用的關鍵在dictionary還是什麼。如果有再從相同的密鑰數組和array添加新元素和更新dictionarysame key。如果不可用,則在dictionary中創建new key。這裏是代碼。

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

for (NSString *str in animals) { 

    NSString *firstLetter = [str substringToIndex:1]; 

    if([[dictTemp allKeys] containsObject:firstLetter]){ 
     NSMutableArray* arrayInner = [NSMutableArray arrayWithArray:[dictTemp valueForKey:firstLetter]]; 

     [arrayInner addObject:str]; 

     [dictTemp setValue:arrayInner forKey:firstLetter]; 

    } 
    else{ 

     NSMutableArray* arrayInner = [[NSMutableArray alloc] init]; 
     [arrayInner addObject:str]; 
     [dictTemp setValue:arrayInner forKey:firstLetter]; 

    } 


} 

NSLog(@"Output : %@",dictTemp); 
+0

如果您有任何問題,請告知我。 –

相關問題