首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NSMutableDictionary setValue:/forKey:?

NSMutableDictionary setValue:/forKey:?
EN

Stack Overflow用户
提问于 2015-04-20 11:24:41
回答 2查看 307关注 0票数 2

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

这是动物阵列:

代码语言:javascript
运行
复制
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的代码:

代码语言:javascript
运行
复制
 for(NSString *str in animals) {
     NSString *firstLetter = [str substringToIndex:1];
     NSArray *newArr = [NSArray arrayWithObject:str];
     [myMutableDictionary setValue:newArr forKey:firstLetter];
 }

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-20 11:34:00

试一试

代码语言:javascript
运行
复制
for (NSString *str in animals) {
    NSString *firstLetter = [str substringToIndex:1];
    if(!myMutableDictionary[firstLetter])
    {
        myMutableDictionary[firstLetter] = [NSMutableArray new];
    }
    NSMutableArray *arr = myMutableDictionary[firstLetter];
    [arr addObject:str];
}
票数 6
EN

Stack Overflow用户

发布于 2015-04-20 11:38:50

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

步骤1:分配NSMutableDictionary

步骤2:在解析NSArray时,检查dictionary中是否有可用的键。如果可用,则该数组来自相同的键,并在array中添加新元素,并在dictionary中更新same key。如果不可用,则在new key中创建dictionary。这是密码。

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29746547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档