有没有办法为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"]];
}
示例场景:
NSMutableDictionary *mDict = @{@"key1":@"value1",@"key2": @"value2"};
我知道
[mDict setObject:mArray forKey:@"key1"];
会将对象设置为key1
,但我需要的是
将另一个对象添加到key1
而不替换现有对象(我需要它们)
答案 0 :(得分:1)
任何NSDictionary
的结构都是&#34;一个对象的一个键&#34;。如果您想构建一个映射一个关键多个对象的结构,则需要NSDictionary
将关键字映射到集合,例如NSArray
或NSMutableArray
:
NSMutableDictionary *mDict = @{
@"key1": [@[ @"value1" ] mutableCopy]
, @"key2": [@[ @"value2" ] mutableCopy]
};
现在,您可以在不替换现有键的情况下为键添加值:
[mDict[@"key1"] addObject:@"value3"];
答案 1 :(得分:0)
NSDictionary
仅允许与单个键对应的单个对象。如果您想添加对应于单个键的多个对象,如果您有字符串类型的对象,那么您也可以使用分隔符来组合字符串,如:
[mDict setObject:[NSString stringWithFormat:@"%@,%@", [mDict objectforKey:@"key1"], @"value2"] forKey:@"key1"];
否则,您必须收集已在问题中定义的集合。
答案 2 :(得分:0)
将另一个对象添加到key1而不替换现有对象...
为什么不将dict设置为key1?
之前:
#include <string>
std::string getStringA()
{
std::string myString = "SomeString";
return myString;
}
const std::string getStringB()
{
std::string myString = "SomeString";
return myString;
}
int main()
{
const std::string temp;
std::string &a1 = getStringA(); // std::string& a1, warning C4239 : nonstandard extension used : 'initializing' : conversion from 'std::string' to 'std::string &'
auto &a2 = getStringA(); // std::string& a2, warning C4239 : nonstandard extension used : 'initializing' : conversion from 'std::string' to 'std::string &'
const std::string &a3 = getStringA(); // all good
auto &b1 = getStringB(); // const std::string& b1
auto &b2 = temp; // const std::string& b2
}
你想:
添加@&#34; b&#34;到了&#34; key1&#34;,在dict;
为什么不喜欢:
[dict setObject:@"a" forKey:@"key1"];
答案 3 :(得分:0)
我建议将数组存储为字典中的键,如下所示:
// 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"] = @[];
}