如何在MATLAB中访问嵌套在单元数组中的结构数组的所有字段元素?

10

以下是创建本问题示例单元数组的代码:

mycell = cell([5,1]);
for i = 1 : size(mycell)
    mystruct = struct();
    mycell{i} = mystruct;
    mycell{i}.field1 = i;
end

我原本期望mycell{:}.field1能够实现我的需求,但是出现了错误。 我可以使用以下for循环:

for i = 1 : size(mycell)
    mycell{i}.field1
end

但我希望有一个更简单或更优雅的解决方案,因为我想在图表中使用mycell.field1的所有元素作为y变量。有任何想法吗?

1个回答

16

两种可能的解决方案:

第一种:

如果你的单元数组中的所有结构体都拥有相同的字段,那么可以使用以下方法:

mycell = [ mycell{:} ]; % convert cell array to struct array
y = [ mycell(:).filed1 ]; % get the values

第二步:

另一种方法使用cellfun

y = cellfun( @(x) x.field1, mycell );  

假设所有的mycell{ii}.field1都是标量,否则需要在cellfun中添加'UniformOutput', false

注意:如果某些字段为空([]),这些方法可能无法按预期工作。

有一个小细节:
在Matlab中使用ij作为变量并不是一个好习惯


1
谢谢提醒关于i和j的问题。现在我不再将它们用作for循环计数器,我发现调试变得更容易了。 - Chad
1
很遗憾,这些结构体并不具有完全相同的字段。cellfun方法非常好用!谢谢。 - Chad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接