首页 > 解决方案 > arrayfun 和 string() 之间的冲突

问题描述

我希望能够方便地确保结构数组的字段仅包含字符串(而不是字符数组)。例如,

S(1).f='abc'; S(2).f='asdfa'; S(3).f="aegwer";

如果有

setfield(S(1),'f',string(S(1).f))

S(1).f将成功转换"abc"为预期。

然而,

arrayfun(@(s)setfield(s,'f',string(s.f)),S)

不仅无法将“f”下的所有字段值设置为字符串,而且实际上将“f”下的所有字段值都转换为字符数组。

为什么arrayfun做成?string()_ char()或者是别的什么?

我正在使用的 MATLAB 版本:R2018a

标签: matlab

解决方案


这里的问题是,setfield不要arrayfun修改原始对象S(即结构没有类似引用的行为)。他们创建一个新的修改对象并返回它。您必须S用这个返回的值覆盖它才能更新:

S = arrayfun(@(s) setfield(s, 'f', string(s.f)), S);

推荐阅读