的最好的选择是使用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]
即使数据组织简化版,出现以前那样直观,你就能指数直接进入结构(并且将具有较低的内存占用)。
您正在使用哪个Matlab版本? – Oleg 2014-09-29 14:55:51