向量化结构字段访问(或修改)matlab?有可能吗?

Vectorizing structure field access (or modify) matlab? Is it even possible?

经过多年的匿名,我刚刚创建了我的帐户来提出一个困扰我一段时间但似乎找不到答案的问题。我真的,真的试过了!开始了:

如果你有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:如果它是结构体元胞数组而不是结构体数组,会有什么不同吗?

您可以将替换字符串放在元胞数组中,然后使用 {:} 索引在赋值的 right-hand 侧创建 comma separated list。在 left-hand 端,something(1:3).toSay 已经创建了一个逗号分隔的列表,因此我们可以将其括在 [] 中,以将右侧的值分配给左侧相应的字段。

newvalues = {'newString1', 'newString2', 'newString3'};
[something(1:3).toSay] = newvalues{:};

参见:Assigning output from a comma separated list and Assigning to a comma separated list

关于您的第二个问题,使其成为结构元胞数组需要额外的步骤,因为当结构在元胞数组中时您不能直接创建逗号分隔列表。您必须先将它们转换为结构数组

sarray = [something{1:3}];
[sarray.toSay] = newValues{:};
something(1:3) = num2cell(sarray);