2

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

如果你有matlab结构数组:

something(1).toSay = 'qwe';

something(2).toSay = 'asd';

something(3).toSay = 'zxc';

有什么方法可以矢量化这三个字段的重新分配toSay

喜欢

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

最终结果是:

something(2).toSay >> 'newString2'

我已经尝试了一些功能以及该setfield功能,但无法使其工作。我对这个问题所做的只是避免使用for-loop

问题 2:如果它是结构元胞数组而不是结构体数组,会有什么不同吗?

4

1 回答 1

1

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

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

请参阅:从逗号分隔列表分配输出分配到逗号分隔列表

关于您的第二个问题,将其设为结构的单元格数组将需要额外的步骤,因为当结构位于单元格数组中时,您无法直接创建逗号分隔的列表。您必须首先将它们转换为结构数组

sarray = [something{1:3}];
[sarray.toSay] = newValues{:};
something(1:3) = num2cell(sarray);
于 2017-02-08T14:09:08.363 回答