循环中结构字段值的赋值 - matlab

时间:2017-03-02 15:35:49

标签: matlab loops structure field matlab-struct

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

带空值的结构声明:

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

1 个答案:

答案 0 :(得分:0)

您需要使用动态字段名称分配给结构(leff-hand侧)。对于右侧,您可以使用fname,但这很危险,因此最好将变量struct保存到文件中,然后将其作为{{}加载回来1}}在访问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);