使用数组中的字段名称创建结构

Create structure with field names from an array

下面有一段代码,我用它来创建一个结构,其字段名称在数组 '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

所以首先,你写它的方式是行不通的,因为 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());