NSDictionary包含NSArray

Moh*_*wke 1 arrays dictionary objective-c data-structures

我对Objective-C很新,并且没有很多C经验,所以请原谅我的无知.我的问题是,是否可以在字典中添加数组?这是我在Python中所做的,而且非常方便:

if 'mykey' not in mydictionary:
    mydictionary['mykey']=[] # init an empty list for 'mykey'
mydictionary['mykey'].append('someitem')
Run Code Online (Sandbox Code Playgroud)

我想要这样的东西,它有效:

NSMutableDictionary *matchDict = [NSMutableDictionary dictionary];
NSMutableArray *matchArray = [NSMutableArray array]; 

while (blah):
    [matchDict setObject: [matchArray addObject: myItem] forKey: myKey];
Run Code Online (Sandbox Code Playgroud)

我到处都没有运气,只是放弃了.任何反馈将不胜感激!

Fir*_*eer 5

它与你在python中所做的并没有什么不同.

NSMutableDictionary *matchDict = ...
NSMutableArray *matchArray = ...
[matchDict setObject:matchArray forKey:someKey];
// This is same as: mydictionary['mykey']=[]


// 'matchArray' is still a valid pointer so..
[matchArray addObject:someObj];

// or later if 'matchArray' were no longer in scope 
// it would look like this:

NSMutableArray* arrayForKey = [matchDict objectForKey:someKey];
[arrayForKey addObject:someObj];

// or more simply:
[[matchDict objectForKey:someKey] addObject:someObj];

// this is same as: mydictionary['mykey'].append('someitem')
Run Code Online (Sandbox Code Playgroud)

编辑

因此,如果您需要为多个密钥添加数组,则可以执行以下操作:

给定一组两个键:

NSArray *keys = [NSArray arrayWithObjects:@"key0",@"key1", nil];
Run Code Online (Sandbox Code Playgroud)

还有一本字典......

NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:[keys count]];
Run Code Online (Sandbox Code Playgroud)

以下是为每个键创建数组的方法:

for (id key in keys) {

    // Create a new array each time...

    NSMutableArray *array = [NSMutableArray array];

    // and insert into dictionary as value for this key

    [dict setObject:array forKey:key];
}
Run Code Online (Sandbox Code Playgroud)

希望这会给你一个想法.