一行代码将Matlab向量转换为逗号分隔列表

5
在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)

2
我喜欢Octave语法[x.a] =num2cell(b){:}; - rahnema1
1
@rahnema1 我一直想让它在Matlab中工作。我不知道它实际上可以在Octave中工作。谢谢。 - Reed Espinosa
2个回答

5

我定义的结构体x常常有其他字段,我不想覆盖它们,因此我真的需要一个逗号分隔的列表,但现在看起来答案是目前没有合理的方法来实现这一点。谢谢! - Reed Espinosa
通常还要记住,如果两条代码可以提高可读性,那么拥有这两行代码其实没有什么大不了的。 - Suever

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));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接