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?

¿Fue útil?

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
scroll top