¿Cómo puedo acceder dinámicamente un campo de un campo de una estructura en MATLAB?
-
04-10-2019 - |
Pregunta
Estoy interesado en el problema general de acceder a un campo que puede estar enterrado un número arbitrario de niveles de profundidad en una estructura que contiene. Un ejemplo concreto usando dos niveles está por debajo.
decir que tengo un toplevel
estructura, que defino desde la línea de comandos de MATLAB con lo siguiente:
midlevel.bottomlevel = 'foo';
toplevel.midlevel = midlevel;
Puedo acceder a la estructura midlevel
pasando el nombre del campo como una cadena, por ejemplo:.
fieldnameToAccess = 'midlevel';
value = toplevel.(fieldnameToAccess);
pero no puedo acceder a la estructura bottomlevel
la misma manera - lo siguiente no es válida la sintaxis:
fieldnameToAccess = 'midlevel.bottomlevel';
value = toplevel.(fieldnameToAccess); %# throws ??? Reference to non-existent field 'midlevel.bottomlevel'
Yo podría escribir una función que se ve a través fieldnameToAccess
por períodos y luego recursivamente itera a través de llegar al campo deseado, pero me gustaría saber si hay alguna forma inteligente de utilizar MATLAB muebles empotrados para obtener sólo el valor del campo directamente.
Solución
tendría que dividir el campo dinámico para acceder en dos pasos para tu ejemplo, como:
>> field1 = 'midlevel';
>> field2 = 'bottomlevel';
>> value = toplevel.(field1).(field2)
value =
foo
Sin embargo, hay una manera usted puede generalizar esta solución para una cadena con un número arbitrario de sub-campos delimitados por puntos. Puede utilizar la función de TextScan para extraer los nombres de los campos de la cuerda y la función getField para llevar a cabo el campo recursiva acceso en un solo paso:
>> fieldnameToAccess = 'midlevel.bottomlevel';
>> fields = textscan(fieldnameToAccess,'%s','Delimiter','.');
>> value = getfield(toplevel,fields{1}{:})
value =
foo