替换cocoa中字典数组中的所有键

替换cocoa中字典数组中的所有键,cocoa,nsarray,nsdictionary,Cocoa,Nsarray,Nsdictionary,我有一个可变数组,由字典数组组成,如下所示: 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;      

我有一个可变数组,由字典数组组成,如下所示:

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;
    }
 })
我不想要一个嵌套的for循环,在这个循环中,我必须迭代数组中的每个元素,再迭代每个字典,迭代每个键,以更改键。 我所做的如下:

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 AllObject]未返回正确的顺序,因此最终数组的顺序不正确。就像-

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

})

您就快到了,唯一的问题是调用
allObjects
,您发现它以任意顺序返回对象。而是定义原始密钥的数组:

NSArray *originalKeys = @[@"COL_1", @"COL_2", @"COL_3", @"COL_4", @"COL_5"];
其中元素的顺序与您的
myDictFnalKeys
中的替换顺序相同。现在将对
allObjects
的调用替换为:

[myDict objectsForKeys:originalKeys notFoundMarker:NSNull.null]
这将按照在
originalKeys
中找到的顺序返回与键匹配的对象数组(在这种情况下,如果缺少键,则结果数组将包含
notFoundMarker
is-
NSNull.null


这样做,您的代码就会工作。

您可以使用“objectsForKeys:notFoundMarker:”按请求的顺序获取值。将[NSNULL null]作为第二个参数传递。(这真的没关系,所有的值都存在于字典中,您没有尝试获取未定义键的值。)

字典是无序的,您期望什么?我的目标是用新键替换旧键。。我遵循这种方法,认为字典将按顺序返回值。是否有任何方法可以实现所需的功能。NSMutableArray*myNewArray=[NSMutableArray]//创建一个新的可变字典(自动发布)