假设我有一个结构体数组
arr
,其中每个元素都有许多字段,包括一个称为val
的字段。 我想通过一定的常量来增加每个元素的val
字段值,就像这样:for i = 1:length(arr)
arr(i).val = arr(i).val + 3;
end
这个显然可行,但我感觉应该有一种方法可以用一行代码完成(而且不需要for循环)。我想出来的最好解决方案是两行代码,并需要一个临时变量:
newVals = num2cell([arr.val] + 3);
[arr.val] = deal(newVals{:});
任何想法?谢谢。
deal
的提示。我不知道setfield
,所以它似乎可以在一行中完成,但正如你所说,这肯定比for循环解决方案更糟糕。至于像那样进行索引,我之前研究过;基本上,Mathworks声称支持任何类似的东西都会强制对解析器进行兼容性破坏性更改。这很遗憾,因为每次编写任何Matlab代码时,它几乎都会让我感到困扰。 - Carlarrayfun
在MATLAB中只是一个包装器,实际上你仍然在使用循环,虽然它们是伪装的。 - Adriaanv = 9
,你可以写成[arr.val] = deal(v);
来将9赋值给结构体数组arr
中每个元素的val
字段。 - Luca Citi[arr.val] = newVals{:};
可以正常工作,但是[arr.val] = newVals(:);
不行 - 假设newVals
是一个向量而不是一个 cell 数组。有人能解释一下吗?! - user2305193