matlab循环遍历struct结构体
作者:matrix 被围观: 13,285 次 发布时间:2019-06-27 分类:零零星星 | 2 条评论 »
matlab网络请求操作完成之后需要对返回数据读取,操作时候出现的问题就是无法循环struct数据。
因为接口一般以json数据格式返回,matlab会把Object结构处理为struct数据而无法循环读取。很多字段的时候我可不希望看到手写矩阵声明。
取struct长度的size
和length
都无法正常返回其元素个数,听说它不是向量。
办法
用fieldnames
函数获取struct的字段field数据(返回为cell元胞数组)
之后用structName.(expression)
这种操作获取动态的struct数组数据。比如struct.a
等同于动态操作的struct.('a')
现在才知道文档上有,我TM竟然随便点括号猜出来的~
%声明方式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字段自动生成对应的变量名和值
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~
你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的你们的
🙄 🙄