在循环中分配结构字段值 - matlab

assignment of structure field values in loop - matlab

我正在尝试在循环中分配结构的字段值。

具有空值的结构声明:

result_struct = struct('a',{},'b',{},'c',{},'d',{})

我正在这样循环中赋值:

% assume a, b, c, d are variables in my workspace

% field names match with the variable names

for index=1:n

% some computation and store results in variables (a-d)

  result_struct(index).a = a;

  result_struct(index).b = b;

  result_struct(index).c = c;

  result_struct(index).d = d;

end

如何使用另一个循环将值分配给字段?像那样:

for fname = fieldnames(result_struct)'

result_struct(index).fname = fname; % field names and variable names match

end

您需要使用动态字段名称 来分配给结构(左手边)。对于右侧,您 可以 使用 eval 但这很危险,因此最好将变量 fname 保存到文件中,然后将其重新加载为a struct 在访问 fname 之前,再次使用动态字段名称。

names = fieldnames(result_struct);    

for k = 1:numel(names)
    % Save variable to a file
    save('tmp.mat', names{k});        

    % Load it back into a struct
    tmp = load('tmp.mat', names{k});

    result_struct(index).(names{k}) = tmp.(names{k});
end

或者,您可以使用 saveload 将整个内容转换为结构,而无需遍历字段。

fields = fieldnames(result_struct);

% Save all relevant variables to a file
save('tmp.mat', fields{:});

% Load it back into the result_struct
result_struct(index) = orderfields(load('tmp.mat'), fields);