在Matlab中,我经常想要将数值向量中的多个值分配给结构数组的给定字段。
b = 1:3;
x(1).a = b(1);
x(2).a = b(2);
x(3).a = b(3);
似乎应该有一种方法可以在一行中完成这项任务,但我可以提出最好的两行。
c = num2cell(b);
[x.a] = c{:};
有没有办法将数字向量转换为以逗号分隔的列表?我正在寻找类似的东西:
[x.a] = num2csl(b);
请注意,我在这里假设length(x) == length(b)
。
答案 0 :(得分:5)
是的,你可以使用struct
。如果您提供一个单元格数组作为给定字段名称的值,MATLAB将创建一个与该字段大小相同的struct
,并使用单元格数组中的每个元素填充结果数组中的相应struct
x = struct('a', num2cell(b))
一般来说,there is no way to easily return a comma-separated list from a function
答案 1 :(得分:2)
如果x
已经存在并且元素数量正确,则只能使用函数来完成此操作:
b = 1:3;
x = repmat(struct, size(b));
[x.a] = num2csl(b);
如果num2csl.m
使用特殊输出约定varargout
,则此方法有效:
function varargout = num2csl(a)
varargout = num2cell(a);
如果另一方面,x
尚不存在,那么这个单行将初始化它,如先前Suever所指出的那样:
x = struct('a', num2cell(b));