NSMutableDictionary setValue:/ forKey:?

时间:2015-04-20 11:24:42

标签: ios objective-c iphone

我有一只名为NSMutableArray的动物。我需要创建一个NSMutableDictionary,以便动物数组中的所有名称都以Keys开头,并以特定的第一个字母= Values开头。

这是动物阵列:

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

问题是,对于每个键只设置了一个值,但我需要所有对象都有一个具有相同值的第一个字母。例如。 value ='b' - > @“熊”,@“黑天鹅”,@“布法罗”。

2 个答案:

答案 0 :(得分: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];
}

答案 1 :(得分:0)

以下是满足您要求的代码。

第1步:分配NSMutableDictionary

第2步:在解析NSArray时,检查初始是dictionary中可用的密钥还是什么。如果可用,那么来自同一个键的数组并在array中添加新元素并在same key中更新dictionary。如果不可用,请在new key中创建dictionary。这是代码。

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