matlab循环遍历struct结构体

2022-09-26 10:41:28 浏览数 (1)

matlab循环遍历struct结构体

作者:matrix 被围观: 9,441 次 发布时间:2019-06-27 分类:零零星星 | 2 条评论 »

这是一个创建于 1161 天前的主题,其中的信息可能已经有所发展或是发生改变。

matlab网络请求操作完成之后需要对返回数据读取,操作时候出现的问题就是无法循环struct数据。

因为接口一般以json数据格式返回,matlab会把Object结构处理为struct数据而无法循环读取。很多字段的时候我可不希望看到手写矩阵声明。

取struct长度的sizelength都无法正常返回其元素个数,听说它不是向量。

办法

fieldnames函数获取struct的字段field数据(返回为cell元胞数组)

之后用structName.(expression)这种操作获取动态的struct数组数据。比如struct.a等同于动态操作的struct.('a')

现在才知道文档上有,我TM竟然随便点括号猜出来的~

代码语言:javascript复制
%声明方式1
%s = struct('a',11,'b',222)

%声明方式2
s=struct
s.a = 11
s.b = 222

% https://ww2.mathworks.cn/help/matlab/ref/struct.html

fileds = fieldnames(s);

for i=1:length(fileds)
    k = fileds(i);
    key = k{1};
    value = s.(key);

    disp(key)
    disp(value)
    disp('---')
end

% s.('a') %动态结构体引用

升级操作:自动生成对应变量

按照Struct字段自动生成对应的变量名和值

代码语言:javascript复制
s = struct('a',11,'b',222)

fileds = fieldnames(s);

for i=1:length(fileds)
    k = fileds(i);
    key = k{1};
    value = s.(key);
    eval(['variable_',num2str(key) ' = ' num2str(value)])
end

说明:

使用eval函数动态创建variable_%s的变量。

本来在mathworks上看到有人发布过Structure fields to variables方法来自动处理struct,但是没有正版授权码 所以无法下载使用。

参考:

https://ww2.mathworks.cn/help/matlab/learn_matlab/types-of-arrays.html

https://ww2.mathworks.cn/help/matlab/ref/struct.html

https://www.ilovematlab.cn/thread-317868-1-1.html

https://ww2.mathworks.cn/matlabcentral/fileexchange/26216-structure-fields-to-variables

PEACE~

0 人点赞