2013-06-18 1 views
0

У меня есть изменяемый массив, которые состоят из множества словарей, как:Заменить все ключи в массиве словаря в какао

NSArray *myArray  
({ 
    { 
        "COL_1" = Jhon; 
        "COL_2" = 01/27/13; 
        "COL_3" = THAILAND; 
        "COL_4" = 5000; 
        "COL_5" = No; 
    }, 
    { 
        "COL_1" = Peter; 
        "COL_2" = 01/27/13; 
        "COL_3" = US; 
        "COL_4" = 4000; 
        "COL_5" = No; 
    } 
 }) 

Все словари в массиве имеют одинаковые ключи. Я хочу заменить существующие ключи новым набором ключей, которые будут поступать из NSArray. Окончательный массив должен быть как -

NSArray *myArray  
({ 
    { 
     "A" = Jhon; 
     "B" = 01/27/13; 
     "C" = THAILAND; 
     "D" = 5000; 
     "E" = No; 
    }, 
    { 
     "A" = Peter; 
     "B" = 01/27/13; 
     "C" = US; 
     "D" = 4000; 
     "E" = No; 
    } 
}) 

Я не хочу, вложенную цикл, в котором я должен повторять Overs каждый элементы в массиве и снова для каждого словаря, итерация каждой клавиши, чтобы изменить ключи. То, что я сделал это следующим образом:

NSArray *myDictFnalKeys = [NSArray arrayWithObjects:@"A",@"B",@"C",@"D",@"E",nil];  // Here we have set our own keys which will replace the existing keys . 
NSMutableArray *myNewArray = [[[NSMutableArray alloc] init] autorelease]; //create a new mutable dictionary 
for (id myArrayInstance in array) { 
            NSDictionary *myNewDict = [[NSDictionary alloc] initWithObjects:[myArrayInstance allObjects] forKeys:myDictFnalKeys]; // copy the object values from old dictionary and keys from the new array. 
            [myNewArray addObject:myNewDict]; 
    } 

Проблема заключается в том, что значения для словарей не идут в правильном порядке. [myArrayInstance allObjects] не возвращает правильный порядок, поэтому последний массив не в правильном порядке. Его приход как-

NSMutableArray *newArray 
({ 
    { 
        A = "01/27/13"; 
        B = No; 
        C = Jhon; 
        D = 5000; 
        E = THAILAND; 
    }, 
    { 
        A = "01/27/13"; 
        B = No; 
        C = Peter; 
        D = 4000; 
        E = US; 
    } 

})

+0

Словари неупорядочены, что вы ожидали? – Abizern

+0

Моя цель состояла в том, чтобы заменить старые ключи новыми ключами. Я последовал этому подходу, думая, что словарь вернет значения упорядоченным образом. Есть ли какой-либо подход для достижения требуемой функциональности. – triandicAnt

+0

NSMutableArray * myNewArray = [NSMutableArray array]; // создаем новый изменяемый словарь (он автоматически выпущен) – geowar

ответ

0

Вы почти там, единственный вопрос, является призыв к allObjects, который, как вы нашли возвращает объекты в некотором произвольном порядке. Вместо того, чтобы определить массив ваших исходных ключей:

NSArray *originalKeys = @[@"COL_1", @"COL_2", @"COL_3", @"COL_4", @"COL_5"]; 

где элементы находятся в том же порядке, как замена в вашем myDictFnalKeys. Теперь заменить вызов allObjects с:

[myDict objectsForKeys:originalKeys notFoundMarker:NSNull.null] 

Это возвращает массив объектов, соответствующих ключей в порядке найдено в originalKeys (если ключ отсутствует, то результирующий массив будет содержать все, что notFoundMarker есть - NSNull.null в Это дело).

Сделайте это, и ваш код будет работать.

+0

Это сработало! Благодаря!! – triandicAnt

0

Вы можете использовать 'objectsForKeys: notFoundMarker:' для получения значений в запрошенном порядке. Передайте [NSNULL null] в качестве второго аргумента. (Это действительно неважно, все значения присутствуют в словаре, и вы не пытаетесь получить значения для неопределенного ключа.)

Смежные вопросы