经过多年的匿名,我刚刚创建了自己的帐户,提出了一段时间困扰我的问题,我似乎无法找到答案。我真的非常努力!在这里:
如果你有matlab结构数组:
something(1).toSay = 'qwe';
something(2).toSay = 'asd';
something(3).toSay = 'zxc';
有没有办法对字段toSay
的这3个条目的重新分配进行矢量化?
喜欢
something = magicFunction(something, [1:3], 'toSay', {'newString1','newString2','newString3'})
最终结果是:
something(2).toSay >> 'newString2'
我已尝试使用setfield
功能,但无法使其正常工作。我试图解决这个问题就是避免使用 for-loop 。
问题2:如果它是结构的单元数组而不是结构数组会有所不同吗?
答案 0 :(得分:0)
您可以将替换字符串放在单元格数组中,然后使用{:}
索引在作业的右侧创建comma separated list。在左侧,something(1:3).toSay
已经创建了逗号分隔列表,因此我们可以将其括在[]
中,以将右侧的值分配给左侧相应字段。
newvalues = {'newString1', 'newString2', 'newString3'};
[something(1:3).toSay] = newvalues{:};
请参阅:Assigning output from a comma separated list和Assigning to a comma separated list
关于第二个问题,将其作为结构的单元格数组将需要一个额外的步骤,因为当结构在单元格数组中时,无法直接创建逗号分隔列表。您必须先将它们转换为结构数组
sarray = [something{1:3}];
[sarray.toSay] = newValues{:};
something(1:3) = num2cell(sarray);