Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
 
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 在Java对象中存储MATLAB结构

我在MATLAB中使用Java HashMap

h = java.util.HashMap; 而且,尽管字符串,数组和矩阵与之完美结合

h.put(5, 'test'); h.put(7, magic(4)); 结构不

h=java.util.HashMap; st.val = 7; h.put(7, st); ??? No method 'put' with matching signature found for class 'java.util.HashMap'.


使它对结构有效的最简单/最优雅的方法是什么?


回答:
您需要确保可以正确转换从MATLAB传递到Java的数据。有关将哪些类型转换为其他类型的转换矩阵,请参见MATLAB的外部接口文档

MATLAB将大多数数据视为传递值(带有句柄语义的类除外),并且似乎没有一种将结构包装在Java接口中的方法。但是您可以使用另一个HashMap来充当结构,然后将MATLAB结构转换为HashMaps(明显警告多层次结构,函数句柄以及其他在MATLAB / Java数据转换过程中表现不佳的野兽) 。

function hmap = struct2hashmap(S) if ((~isstruct(S)) || (numel(S) ~= 1)) error('struct2hashmap:invalid','%s',... 'struct2hashmap only accepts single structures'); end hmap = java.util.HashMap; for fn = fieldnames(S)' % fn iterates through the field names of S % fn is a 1x1 cell array fn = fn{1}; hmap.put(fn,getfield(S,fn)); end 一个可能的用例:

>> M = java.util.HashMap; >> M.put(1,'a'); >> M.put(2,33); >> s = struct('a',37,'b',4,'c','bingo') s = a: 37 b: 4 c: 'bingo' >> M.put(3,struct2hashmap(s)); >> M M = {3.0={a=37.0, c=bingo, b=4.0}, 1.0=a, 2.0=33.0} >> (针对读者的练习:将其更改为对本身就是结构的结构成员进行递归工作)



更多&回答...
poster 当前离线   回复时引用此帖
 

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 03:20


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.