2014-09-29 64 views
1

分配多個結構在結構陣列到目前爲止,我有這個,如何在Matlab

Order = struct('Name',{},'Item',{},'Quantity',{},'DueDate',{}); 
Order(1).Name = 'Order 1'; Order(1).Item = 'Rolo'; Order(1).Quantity = '1'; Order(1).DueDate = '735879'; 
Order(1).Name = 'Order 1'; Order(1).Item = 'Trident'; Order(1).Quantity = '2'; Order(1).DueDate = '735887'; 
Order(2).Name = 'Order 2'; Order(2).Item = 'Hershey';Order(2).Quantity = '3'; Order(2).DueDate = '735875'; 
Order(3).Name = 'Order 3'; Order(3).Item = 'Kitkat'; Order(3).Quantity = '6'; Order(3).DueDate = '735890'; 

在每一個訂單,有多個項目,項目的數量,所以我想每個訂單的每個結構陣列能夠保存訂單的多個項目,數量和到期日。

謝謝!

+0

您正在使用哪個Matlab版本? – Oleg 2014-09-29 14:55:51

回答

1

最好的選擇是使用table()(或dataset()如果你的Matlab的版本比2014A舊的,但你必須統計工具箱):

Order = table({'Order 1';'Order 2';'Order 3'},... 
       {'Trident';'Hershey';'Kitkat'},... 
       [2; 3; 6],... 
       [735887; 735875; 735890],... 
       'VariableNames',{'Name','Item','Quantity','DueDate'}) 

Order = 
     Name   Item  Quantity DueDate 
    _________ _________ ________ _______ 
    'Order 1' 'Trident' 2   735887 
    'Order 2' 'Hershey' 3   735875 
    'Order 3' 'Kitkat'  6   735890 

您可以訪問它,你會用結構做但你有更多的優勢,例如訪問和檢查數據更容易,更小的內存佔用等。


什麼你正在試圖建立「手動」是結構數組(讓我強調陣列這裏):

% A structure array 
s = struct('Name',  {'Order 1';'Order 2';'Order 3'},... 
      'Item',  {'Trident';'Hershey';'Kitkat'},... 
      'Quantity', {2; 3; 6},... 
      'DueDate', {735887; 735875; 735890}); 

s = 
3x1 struct array with fields: 
    Name 
    Item 
    Quantity 
    DueDate 

每個標量結構(/單元/記錄/對象/部件稱之爲你怎麼樣)的陣列將具有一組屬性:

s(1) 
ans = 
     Name: 'Order 1' 
     Item: 'Trident' 
    Quantity: 2 
    DueDate: 735887 

數據的組織看起來很直觀。但是,如果您想要在整個陣列中應用操作,例如選擇那些有Quantity > 2,你需要首先連接整個字段到一個臨時數組,然後才應用您的操作,並在最壞的情況下(如果你嵌套字段),你將不得不循環。

我個人更喜歡數據庫/數據集/表方法,其中每個記錄是一行,列是屬性。您可以通過扁平化結構數組爲標結構做到這一點(注意括號):

% A flat structure 
s = struct('Name',  {{'Order 1';'Order 2';'Order 3'}},... 
      'Item',  {{'Trident';'Hershey';'Kitkat'}},... 
      'Quantity', [2; 3; 6],... 
      'DueDate', [735887; 735875; 735890]); 
s = 
     Name: {3x1 cell} 
     Item: {3x1 cell} 
    Quantity: [3x1 double] 
    DueDate: [3x1 double] 

即使數據組織簡化版,出現以前那樣直觀,你就能指數直接進入結構(並且將具有較低的內存佔用)。