java - mostrar - matlab orientado a objetos pdf
Almacenamiento de estructuras de MATLAB en objetos Java (3)
Debe asegurarse de que los datos que pasan de MATLAB a Java se puedan convertir correctamente. Consulte el documento Interfaces externas de MATLAB para la matriz de conversión de los tipos que se convierten a otros tipos.
MATLAB trata la mayoría de los datos como valor por paso (con la excepción de clases con semántica de manejo), y no parece haber una manera de ajustar una estructura en una interfaz Java. Pero podría usar otro HashMap para actuar como una estructura y convertir estructuras MATLAB en HashMaps (con una advertencia obvia para estructuras de múltiples niveles, manejadores de funciones, + otras bestias que no funcionan bien con el proceso de conversión de datos 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
un posible caso de uso:
>> 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}
>>
(un ejercicio para el lector: cambie esto para que funcione recursivamente para los miembros de la estructura, que a su vez son estructuras)
Estoy usando Java HashMap en MATLAB
h = java.util.HashMap;
Y mientras que las cadenas, matrices y matrices funcionan sin problemas con él
h.put(5, ''test'');
h.put(7, magic(4));
Las estructuras no
h=java.util.HashMap;
st.val = 7;
h.put(7, st);
??? No method ''put'' with matching signature found for class ''java.util.HashMap''.
¿Cuál sería la forma más fácil / más elegante de hacer que funcione para structs?
No estoy familiarizado con Java HashMaps, pero ¿podría intentar usar una matriz de celdas para almacenar los datos en lugar de una estructura?
h = java.util.HashMap;
carr = {7, ''hello''};
h.put(7, carr);
% OR
h = java.util.HashMap;
st.val = 7;
h.put(7, struct2cell(st));
Matlab R2008b y los más nuevos tienen una clase de contenedores. Map que proporciona la funcionalidad similar a HashMap en tipos de datos Matlab nativos, por lo que trabajarán con estructuras, celdas, objetos Matlab definidos por el usuario, y más.
% Must initialize with a dummy value to allow numeric keys
m = containers.Map(0, 0, ''uniformValues'',false);
% Remove dummy entry
m.remove(0);
m(5) = ''test'';
m(7) = magic(4);
m(9) = struct(''foo'',42, ''bar'',1:3);
m(5), m(7), m(9) % get values back out