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 变量。有任何想法吗?

4

1 回答 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}.filed1都是标量,否则你需要添加'UniformOutput', falsecellfun.

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

一个小评论:在 Matlab 中使用作为变量
不是一个好习惯ij

于 2013-02-14T19:52:50.497 回答