2013-06-18 36 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; 
    } 
}) 

我不想要一個嵌套的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 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]。 (這真的沒有關係,所有的值都出現在字典中,而你並沒有試圖獲得未定義鍵的值。)