Как добавить массив объектов в nsmutabledictionary с другим массивом в качестве ключа - PullRequest
4 голосов
/ 23 ноября 2011
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> "

В первом значении мне нужно сохранить два объекта, а для второго ключа Iнеобходимо сохранить 3 объекта и для третьего ключа необходимо сохранить два последних объекта в словаре.

Ответы [ 2 ]

6 голосов
/ 23 ноября 2011

Для упрощения вы можете использовать следующий код:

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

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

Надеюсь, это поможет.

UPDATE:

для хранения нескольких значений для одного ключа в словаре, просто используйте 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];
}
3 голосов
/ 23 ноября 2011

Мне кажется, вы устанавливаете массив (aaa) со строкой (attri) в качестве ключа.

Чтобы установить массив в качестве ключа для другого массива в качестве объекта.Вы можете сделать это с помощью следующей аппроксимации:

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

Но вы должны просмотреть свой код и дать более краткое объяснение того, чего вы хотите достичь и как вы подходите к этому.

С уважением,

Арслан

...