Objective C。 NSMutable 字典向现有键添加值
Objective C. NSMutable Dictionary adding value to existing key
有什么方法可以为 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
添加另一个对象(我都需要)
任何NSDictionary
的结构是"one key to one object"。如果您想构建一个映射一个键多个对象的结构,您需要一个 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 添加另一个对象...
为什么不给 key1 设置一个字典?
之前:
[dict setObject:@"a" forKey:@"key1"];
你想要:
在字典中添加@"b"到"key1";
为什么不喜欢:
[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"] = @[];
}
有什么方法可以为 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
添加另一个对象(我都需要)
任何NSDictionary
的结构是"one key to one object"。如果您想构建一个映射一个键多个对象的结构,您需要一个 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 添加另一个对象...
为什么不给 key1 设置一个字典?
之前:
[dict setObject:@"a" forKey:@"key1"];
你想要:
在字典中添加@"b"到"key1";
为什么不喜欢:
[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"] = @[];
}