Iphone 如何使用另一个数组作为键将对象数组添加到nsmutabledictionary

Iphone 如何使用另一个数组作为键将对象数组添加到nsmutabledictionary,iphone,objective-c,nsmutablearray,nsmutabledictionary,Iphone,Objective C,Nsmutablearray,Nsmutabledictionary,在一个数组中键入值,在另一个数组中键入值,则值数组为对象格式 我需要为单个键存储多个对象。attributeArray具有键值,elementsArray具有对象。例如,attributeArray可能具有以下值 for(Attribute* attribute in appDelegate.attributeArray) { attribute = [appDelegate.attributeArray objectAtIndex:z]; attri = attribute.z

在一个数组中键入值,在另一个数组中键入值,则值数组为对象格式

我需要为单个键存储多个对象。
attributeArray
具有键值,
elementsArray
具有对象。例如,attributeArray可能具有以下值

for(Attribute* attribute in appDelegate.attributeArray) {
    attribute = [appDelegate.attributeArray objectAtIndex:z];
    attri = attribute.zName;
    int y = 0;
    for(Row* r in appDelegate.elementsArray) {
        r = [appDelegate.elementsArray objectAtIndex:y];
        NSString *ele = r.language;
        if([attri isEqualToString:ele]) {
            NSLog(@"=================+++++++++++++++++%@ %@",attri, r.user);
            [aaa insertObject:r atIndex:y]; //here i am adding the value to array
            [dict setObject:aaa forKey:attri]; //here i am adding the array to dictionary
        }
        y++;
    }
    z++;
    NSLog(@"============$$$$$$$$$$$$$$$$$$$$$$$++++++++++ %@",dict);
}
元素数组可能有对象值

 " English, French, German..."
“,”

在第一个值中,我需要存储两个对象,对于第二个键,我需要存储3个对象,对于第三个键,我需要在字典中存储最后两个对象。

在我看来,您是设置一个以字符串(attri)为键的数组(aaa)

将一个数组设置为键,将另一个数组设置为对象。您可以使用以下方法执行此操作

"<Row: 0x4b29d40>, <Row: 0x4b497a0>, <Row: 0x4e38940>, <Row: 0x4b2a070>, <Row: 0x4b29ab0>, <Row: 0x4b178a0> "
但是,您应该检查您的代码,并提供一个更简短的解释,说明您想要实现什么,以及您如何为此采取一种方法

问候,


Arslan

为了实现超级简化,您可以使用以下代码:

NSMutableDictionary *myDictionary = [NSMutableDictionary dictionaryWithCapacity:1];

NSArray *valueArray = [NSArray arrayWithObjects:@"v1", @"v2", nil];
NSArray *keyArray = [NSArray arrayWithObjects:@"k1",@"k2", nil];

[myDictionary setObject:valueArray forKey:keyArray];
NSLog(@"myDictionary: %@", myDictionary);
希望,这有帮助

更新:

要在字典中为单个键存储多个值,只需使用
NSArray
/
NSMutableArray
作为对象:

NSArray *keys = ...;
NSArray *values = ...;

NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjects: values forKeys: keys];
如果您从一开始就不知道该键的所有值,并且需要逐个添加这些值,则可以使用以下方法:

NSArray *keys = ...;
NSMutableDictionary *dict = [NSMutableDictionary dictionary];

for( id theKey in keys) 
{
  NSMutableArray *item = [NSMutableArray array];
  [item addObject: ...];
  [item addObject: ...];
  ...

  [dict setObject: item forKey: theKey];
}

这不是一个好的解决方案-您有一个数组实例作为key:/@Denis。我知道这不是一个好的解决方案,但我认为这就是问题的目的。Bala已经解释了这个问题,现在您可以看到,根据用户提供的解释,我的答案是合适的,因为值和键数组可以有不同的长度。但是如果我们要使用“dictionaryWithObjects:values-forKeys:keys”,那么我们必须确保两个数组的长度都是用户实际不需要的长度。我希望我的观点清楚。谢谢。我的观点是,使用集合实例作为键不是一个好的解决方案,这里我需要为单个键存储多个对象。这里attributeArray具有键值,elementsArray具有对象。例如attributeArray具有值“English,French,Germany…”元素数组的对象值为“,”,在第一个值中我需要存储两个对象,对于第二个键,我需要存储3个对象,对于第三个键,我需要存储字典中的最后2个对象。谢谢denis,我想你已经部分理解了我的问题,如果不是的话,我必须向verbia解释。如果可能的话,你可以检查它。首先,我解析文件testxml文件并将其存储在两个数组中,并尝试将数组作为字典显示在表视图中。在表视图中,标题是userlanguage中的属性值,tableviewcell应该显示用户名、url和cdate。但是我无法创建字典。您编写带越界异常的代码时崩溃的原因是,您没有在XMLParser.m中的“for(appDelegate.elementsArray中的行*r){id valueToAdd=[appDelegate.elementsArray objectAtIndex:e];”行之前将e local var重置为零;之后,您将在“id keyToUse=[appDelegate.headerArray objectAtIndex:d];”,因为headerArray和elementsArray具有不同的计数;而且,我不明白,为什么在中为每个循环语句使用索引访问设置存储在elementarray中的对象的值。是否有其他方法访问这些值。您可以按如下方式迭代数组项:for(id theKey in key){NSLog(theKey);}在数组的每次迭代中,key将是数组中的下一项
NSMutableDictionary *dict = [NSMutableDictionary dictionary];

for( /*some cycling condition here */) 
{
  id keyToUse = ...;
  id valueToAdd = ...;

  id foundArray = [dict objectForKey: keyToUse];
  if ( nil == foundArray )
  {
    foundArray = [NSMutableArray array];
    [dict setObject: foundArray forKey: keyToUse];
  }

  [foundArray addObject: valueToAdd];
}