0

下面我有一段代码,我用它来创建一个结构,其中的字段名称在数组“field_names”中定义。这似乎是一种非常笨拙的创建结构的方式。

有没有更好的方法可以在一行中做到这一点?也许有一些语法技巧可以帮助我避免 for 循环?

%array of names to create field names from
field_names = ['num1', 'num2', 'num3', 'etc'];
data = struct()
for i = 1:length(field_names)
    data.field_names(i) = rand() %some random value, doesn't matter for now
end
4

1 回答 1

2

所以首先,你写它的方式是行不通的,因为它field_names应该是一个cell数组,struct动态字段引用需要括号:

data.(field_names{i}) = rand();

您可以使用这些字段名和所需的值cell2struct来构造。struct

field_names = {'num1', 'num2', 'num3'};
values = num2cell(rand(size(field_names)));

S = cell2struct(values(:), field_names(:))

%    num1: 0.2277
%    num2: 0.4357
%    num3: 0.3111

您还可以在struct直接调用时创建所有字段和值:

S = struct('num1', rand(), 'num2', rand(), 'num3', rand());
于 2016-09-19T17:51:28.703 回答