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

时间:2011-11-23 06:47:46

标签: iphone objective-c nsmutablearray nsmutabledictionary

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);
}

键在一个数组中,另一个数组中的值和值数组是对象格式。

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

 " English, French, German..."

并且elementsArray可能具有对象值

"<Row: 0x4b29d40>, <Row: 0x4b497a0>, <Row: 0x4e38940>, <Row: 0x4b2a070>, <Row: 0x4b29ab0>, <Row: 0x4b178a0> "

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

2 个答案:

答案 0 :(得分:6)

对于超简化,您可以使用以下代码:

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

NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjects: values forKeys: keys];

希望,这有帮助。

<强>更新

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

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

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

  [dict setObject: item forKey: theKey];
}

如果您从一开始就不知道密钥的所有值,并且需要逐个添加它们,则可以使用以下方法:

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];
}

答案 1 :(得分:3)

对我而言,它看起来是设置一个数组(aaa),其中字符串(attri)作为键。

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

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);

但是你应该检查你的代码,并提供一个更简要的解释,说明你想要实现什么,以及你如何采取相应的方法。

的问候,

尔斯兰