gpt4 book ai didi

matlab - 使用动态字段名的嵌套结构访问

转载 作者:太空宇宙 更新时间:2023-11-03 20:30:00 25 4
gpt4 key购买 nike

我想使用动态字段名而不是 setfield 实现以下目标:

假设一个结构“myStruct”有一组嵌套结构,即

myStruct.a.b.c = 0
myStruct.a.d = 0
myStruct.a.e.f.g = 0

我希望能够灵活设置叶子结构值如下:

fields = {'a', 'b', 'c'}
paramVal = 1
setfield(myStruct, fields{:}, paramVal)

这可以使用 setfield。有没有一种语法可以使用动态字段名来做到这一点?以下显然不起作用,因为字段名需要是字符串而不是数组,但演示了我想要的内容:

myStruct.(fields{:}) = 0

相当于:

myStruct.('a').('b').('c') = 0

最佳答案

没有 eval 的递归解决方案,从我的一个旧实用函数中提取:

function s = setsubfield(s, fields, val)

if ischar(fields)
fields = regexp(fields, '\.', 'split'); % split into cell array of sub-fields
end

if length(fields) == 1
s.(fields{1}) = val;
else
try
subfield = s.(fields{1}); % see if subfield already exists
catch
subfield = struct(); % if not, create it
end
s.(fields{1}) = setsubfield(subfield, fields(2:end), val);
end

我猜 try/catch 可以用 if isfield(s, fields{1}) ... 代替,我不记得我为什么编码了就像那样。

用法:

>> s = struct();
>> s = setsubfield(s, {'a','b','c'}, 55);
>> s = setsubfield(s, 'a.b.d.e', 12)
>> s.a.b.c
ans =
55
>> s.a.b.d.e
ans =
12

关于matlab - 使用动态字段名的嵌套结构访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21145042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com