2011-11-23 40 views
1

我的程序中有一個循環,每次迭代時都會生成一個ID。我想將這些ID存儲到一個二維數組中,即A中.A的第一列存儲迭代次數,即A(1,1)= 1和A(2,1)= 2。 A存儲每次迭代過程中生成的ID,即A(1,2)存儲第一次迭代過程中生成的ID。棘手的部分是這些ID可以是數字值或字符串。例如,A(1,2)= 12345; A(2,2)= abcde關於混合類型值矩陣的存儲問題

應該使用哪種數據結構來存儲這個混合值矩陣?

回答

1

你有兩個很好的選擇,一個單元格數組或一個結構數組。

  1. 要使用單元陣列,你需要使用大括號:

    A{1,1} = 1; 
    A{2,1} = 2; 
    A{1,2} = 12345; 
    A{2,2} = 'abcd'; 
    

    您不能使用電池陣列大多數量化代碼,但你可以數字的子集轉換爲數值數組,例如:

    col1 = cell2mat(A(:,1)); 
    
  2. 要使用結構數組,您需要定義字段。這具有您可以命名您的數據列的優點。

    A(1).iteration = 1; 
    A(2).iteration = 2; 
    A(1).result = 12345; 
    A(2).result = 'abcd'; 
    

    要訪問數據的單一行,請使用A(1),這樣

    >> A(1) 
    ans = 
        iteration: 1 
        result: 12345 
    

    訪問數據,使用括號的列或牙套

    >> [A.iteration] %This results a numeric array, or an error if not possible 
    ans = 
        1  2 
    >> {A.result} %This returns a cell array, as discussed above. 
    ans = 
        [12345] 'abcd' 
    

哪個選項你的使用取決於你的任務的性質以及哪種方法更適合你的風格。我通常從一個單元格數組開始,並最終轉換爲一個結構數組以利用命名字段。