Objective c 目标C.为现有密钥增加价值的NSMutable字典
有没有办法向Objective c 目标C.为现有密钥增加价值的NSMutable字典,objective-c,nsmutablearray,nsmutabledictionary,Objective C,Nsmutablearray,Nsmutabledictionary,有没有办法向NSMutableDictionary上的现有键添加值 下面是我的代码片段 NSMutableArray *mainFeedList = [NSMutableArray array]; [mainFeedList addObjectsFromArray:feedList]; for(int i = 0; i < mainFeedList.count; i++){ NSMutableArray *allFeed = [NSMutableArray array
NSMutableDictionary
上的现有键添加值
下面是我的代码片段
NSMutableArray *mainFeedList = [NSMutableArray array];
[mainFeedList addObjectsFromArray:feedList];
for(int i = 0; i < mainFeedList.count; i++){
NSMutableArray *allFeed = [NSMutableArray array];
NSString *categoryId = [mainFeedList[i] valueForKey: @"categoryId"];
[allFeed addObject:mainFeedList[i]];
if(allFeed != nil && allFeed.count > 0) {
[feedContent setObject:allFeed
forKey:[combinedCategories[(int)[categoryId integerValue]] valueForKey: @"name"]];
}
我知道
[mDict setObject:mArray forKey:@"key1"];
将对象设置为key1
,但我需要的是
将另一个对象添加到
key1
而不替换现有对象(我两者都需要)任何NSDictionary
的结构都是“一个键到一个对象”。如果要构建映射一个键多个对象的结构,则需要一个将键映射到集合的NSDictionary
,例如NSArray
或NSMutableArray
:
NSMutableDictionary *mDict = @{
@"key1": [@[ @"value1" ] mutableCopy]
, @"key2": [@[ @"value2" ] mutableCopy]
};
现在,您可以在不替换现有值的情况下向键添加值:
[mDict[@"key1"] addObject:@"value3"];
NSDictionary
仅允许与单个键对应的单个对象。如果要添加与单个键对应的多个对象,如果对象为字符串类型,则还可以使用分隔符组合字符串,如:
[mDict setObject:[NSString stringWithFormat:@“%@,%@”,[mDict objectforKey:@“key1”],@“value2”]forKey:@“key1”];
否则,您必须获取您在问题中已定义的集合。在不替换现有对象的情况下向key1添加另一个对象 为什么不将dict设置为key1 之前:
[dict setObject:@“a”forKey:@“key1”]代码>
你想:
在dict中的“key1”中添加@“b”
为什么不喜欢:
[dict setObject:@{“a”:“subKey1”,“b”:“subKey2”)forKey:@“key1”]代码>我建议将数组作为键存储在字典中,如下所示:
// Setting the value for "key1" to an array holding your first value
NSMutableDictionary *mDict = @{@"key1":@["value1"],@"key2": @"value2"};
现在,当我想添加一个新值时,我会这样做:
// Create temp array
NSMutableArray *temp = mDict[@"key1"];
// Add new object
[temp addObject:@"value3"];
// Convert temp NSMutableArray to an NSArray so you can store it in your dict
NSArray *newArray = [[NSArray alloc] initWithArray:temp];
// Replace old array stored in dict with new array
mDict[@"key1"] = newArray;
此外,如果您不确定是否已为该密钥存储了数组,则可以运行检查并使用空字典进行填充,如下所示:
if (mDict[@"key1"] == nil) {
mDict[@"key1"] = @[];
}
做不到。字典必须有唯一的键。如果存在重复项,您将无法使用字典获取。我是否应该检查该键是否存在,然后如果存在,则向该键添加对象将此代码[mdct[@“key1”]addObject:@“value3”];将对象添加到键,否则它将仅替换当前value@SkyWalker绝对地这只是一个使用问题代码的快速说明addObject
将为同一个键添加第二个对象,因此您将得到以下结构:@“key1”:@[@“value1”,“value3”]
NSMutableDictionary*dict=[[NSMutableDictionary alloc]init];如果([dict valueForKey:@“name”!=nil){[dict setValue:@“value”forKey:@“name”];}否则{[dict[@“name”]addObject:@“value3”];}@SkyWalker将不起作用,因为您添加的对象需要是可变数组,即添加第一个对象需要如下所示:`[dict setValue:[@[@“value”]mutableCopy]forKey:@“name”]`
if (mDict[@"key1"] == nil) {
mDict[@"key1"] = @[];
}