【问题标题】:How to assign multiple structures in a struct array in Matlab如何在Matlab的结构数组中分配多个结构
【发布时间】:2014-09-29 14:46:02
【问题描述】:

到目前为止,我有这个,

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';

在每个订单中,有多个项目和项目数量,所以我希望每个订单的每个结构数组能够保存多个项目、数量和订单的到期日期。

谢谢!

【问题讨论】:

  • 您使用的是哪个 Matlab 版本?

标签: arrays matlab struct


【解决方案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

数组的每个标量结构(/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]

即使数据组织不像以前那样直观,您也可以直接索引到结构中(并且内存占用更少)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-08
    • 2015-05-16
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多