iPhone: Как создать NSMutableDictionary, который содержит несколько наборов данных с одинаковым ключом?

#iphone #objective-c #cocoa-touch #ios4 #nsmutabledictionary

#iPhone #objective-c #cocoa-touch #ios4 #nsmutabledictionary

Вопрос:

 {

"data": [
    {
        "data": [
            null,
            null,
            30,
            45,
            69,
            70,
            65
        ],
        "title": "title5" 
    },
    {
        "data": [
            null,
            5,
            10,
            15,
            22,
            30 
        ],
        "title": "title4" 
    },
    {
        "data": [
            40,
            55,
        ],
        "title": "title3" 
    },
    {
          "data": [
              null,
            89,
            90,
            85
        ],
        "title": "title2" 
    },
    {
        "data": [
            66,
            77,
            55,
            33,
            50,
            -6,
            -8
        ],
        "title": "title1" 
    } 
],
 "x_labels": [
    6,
    7,
    8,
    9,
    10,
    11,
    12
]
}
  

Я хочу, чтобы в моем словаре был один и тот же ключ с именем «data» и «title» для каждого набора значений, которые он содержит, как показано в приведенном выше коде.

Но когда я пытаюсь создать словарь и пытаюсь использовать setValue:forKey: метод для того же ключа или addEntriesFromDictionary: он перезаписывает каждый набор данных, и, наконец, я получаю только последний набор данных, который я вставил в свой словарь.

Есть ли способ, которым я могу это сделать?

Ответ №1:

Обратите внимание, что первый объект в словаре самого низкого уровня — это список или массив. Это ключ.

  NSMutableArray * dataArr = [NSMutableArray array];
 NSArray * x_labelArr = [NSArray arrayWithObjects: ...];
 NSMutableDictionary * dict = 
            [NSMutableDictionary dictionaryWithObjectsAndKeys: 
                     arr, @"data", x_labelArr, @"x_labels", nil];
  

Теперь вы можете добавить в массив отдельные внутренние словари, каждый из которых имеет одинаковые ключи:

 NSDictionary * innerDict = 
            [NSDictionary dictionaryWithObjectsAndKeys: 
                  someArrayOfData, @"data", someTitle, @"title"];
NSDictionary * innerDict2 = 
            [NSDictionary dictionaryWithObjectsAndKeys: 
                            someOtherArrayOfData, @"data", 
                                 someOtherTitle, @"title"];
[dataArr addObject:innerDict];
[dataArr addObject:innerDict2];
  

Ответ №2:

Вы можете добавить словари в свой словарь; все словари содержат «данные»-> asdf, «заголовок»-> asdf. Или добавьте массив для элемента «данные» и добавьте к нему. Но, судя по тому, как выглядят ваши данные, более вероятно, что вы хотите это.