gpt4 book ai didi

java - 在 Java 对象中存储 MATLAB 结构

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:39:38 25 4
gpt4 key购买 nike

我在 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 的 External Interfaces document对于哪些类型转换为其他类型的转换矩阵。

MATLAB 将大多数数据视为按值传递(具有句柄语义的类除外),并且似乎没有办法将结构包装在 Java 接口(interface)中。但是您可以使用另一个 HashMap 来充当结构,并将 MATLAB 结构转换为 HashMap(对多级结构、函数句柄和其他在 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}

>>

(给读者的练习:将其更改为递归地为结构成员工作,而结构成员本身就是结构)

关于java - 在 Java 对象中存储 MATLAB 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/436852/

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