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