【问题标题】:Matlab: howto convert cell array of structs into struct array using colon operator?Matlab:如何使用冒号运算符将结构单元数组转换为结构数组?
【发布时间】:2012-02-07 22:12:21
【问题描述】:

假设有一个使用以下结构值初始化的元胞数组。

% Phone book
phone_record{1} = struct('name', 'Bob', 'phone', '1233323');
phone_record{2} = struct('name', 'Mike', 'phone', '3245524');

% How to make such or similar one-liner work?
% phonebook(:) = phone_record{:}

% Expected:
% phonebook(1).name = 'Bob';
% phonebook(1).phone= '1233323';
% phonebook(2).name = 'Mike';
% phonebook(2).phone = '3245524';

确实可以使用 cell2struct 或 for 循环索引来完成此任务吗? 可以使用 deal 或类似的吗?

注意:如果您不知道解决方案,请不要使用“最佳实践”提示或类似的“挥手”。

【问题讨论】:

  • 请注意,数组到数组的非循环分配可以很好地工作,就像这里stackoverflow.com/questions/8372619/…
  • 告诉试图帮助您的人“请不要使用“最佳实践”暗示或类似的“挥手”可能是一种糟糕的形式。屈尊俯就很少被认为是人们从一天中抽出时间来帮助你的动机。
  • 如果这看起来很粗鲁,我深表歉意,但这是一个技术问题,我得到的答案非常中肯!不幸的是,社区中有些成员喜欢制作不必要的 cmets ;-) 或诸如“哇,如果我是你,我不会那样做……”,“考虑使用 use oop”和类似的无关废话。我有一个技术问题。我的观点是,如果您不知道答案,请考虑限制自己只说一些话,并腾出其他用户阅读此知识库以寻找解决方案的时间。
  • 提示:Matlab2014 提供了一种新的有前途的数据类型,称为 table mathworks.ch/ch/help/matlab/ref/table.html 有点像 R 的数据框和 python pandas 的方向。

标签: matlab


【解决方案1】:

您可以使用cell2mat

cell2mat(phone_record)

ans =

带字段的 1x2 结构数组:

名称
电话

【讨论】:

  • 谢谢——你为我节省了大量的工作。
【解决方案2】:

嗯,

phone_book = cat( 2, phone_record{ :})

确实使用了冒号运算符,并且会给出与 cell2mat(phone_record) 相同的结果。

另一种非冒号解决方案是

cellfun(@(x) x, phone_record).'

具有动态转换结构的好处,例如添加(缺失)字段。当然,这里我们使用身份。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 2019-04-04
    相关资源
    最近更新 更多