¿Cómo puedo cambiar el nombre de un campo en una matriz de estructura en MATLAB?
-
02-10-2019 - |
Pregunta
Dada una matriz de estructura, cómo puedo cambiar el nombre de un campo? Por ejemplo, dada la siguiente, ¿cómo cambio "barra" a "Baz".
clear
a(1).foo = 1;
a(1).bar = 'one';
a(2).foo = 2;
a(2).bar = 'two';
a(3).foo = 3;
a(3).bar = 'three';
disp(a)
¿Cuál es el mejor método, donde "mejor" es un equilibrio de rendimiento, claridad y generalidad?
Solución
Ampliando esta solución de Mateo, también se puede utilizar nombres de los campos dinámicos si los nuevos y viejos nombres de los campos se almacenan como cadenas:
newName = 'baz';
oldName = 'bar';
[a.(newName)] = a.(oldName);
a = rmfield(a,oldName);
Otros consejos
Aquí hay una manera de hacerlo con la lista de expansión / rmfield
:
[a.baz] = a.bar;
a = rmfield(a,'bar');
disp(a)
La primera línea fue escrito originalmente [a(:).baz] = deal(a(:).bar);
, pero SCFrench señaló que el deal
era innecesaria.
Aquí hay una manera de hacerlo con struct2cell / cell2struct:
f = fieldnames(a);
f{strmatch('bar',f,'exact')} = 'baz';
c = struct2cell(a);
a = cell2struct(c,f);
disp(a)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow