最佳选择是使用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
数组的每个标量结构(/unit/record/object/member 怎么称呼)都会有一组属性:
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]
即使数据组织不像以前那样直观,您也可以直接索引到结构中(并且内存占用更少)。