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

标签 java matlab hashmap

我在 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/

相关文章:

android - 如何从 hashmap 中对 arraylist 进行排序?

java - Hadoop Library导入但无法在File System中设置 "get"方法

matlab - 如何在matlab中使用fminunc时获取成本历史记录

matlab - 如何区分嵌套元胞数组

c++ - 矩阵乘法运行时间 Python < C++ < Matlab - 解释

java - Java中有SoftHashMap吗?

java - 使用 HashMap 和数组组织锻炼信息

java - 哈希集重复值,但我没有自定义对象

java - 与 JUNG 库合作

java - 语法错误,插入 "EnumBody"以完成 EnumDeclaration