A better way to change the name of a structure field?
27 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Hello,
I would like to change the name of a structure field at run time. Specifically, I want to change all the names to upper case. Currently I am achieving this with the following function:
function s = upperfnames(s)
% upperfnames: converts all the field names in a structure to upper case
% get the structure field names
fn = fieldnames(s);
for ii = 1:length(fn)
fname = fn{ii};
% check if the field is already upper case
if ~strcmp(fname, upper(fname))
% if not create an upper case copy of the field
s.(upper(fname)) = s.(fname);
% and remove the original
s = rmfield(s, fname);
end
end
end
The problem here is that I must create a copy of any fields with names which must be changed. According to the whos function as I step through the code, this uses up double the memory required for the field. This could cause problems when I forget about this in a year or two and try to change the name of a structure containing lots of data. Is there a more memory efficient way of doing this?
Thanks,
Richard
0 comentarios
Respuesta aceptada
Jan
el 17 de Mzo. de 2011
F = fieldnames(S);
S = RenameField(S, F, upper(F));
It creates a shared data copy, such that the memory consumption is minimal.
BTW: I get exactly these two links on top, if I ask Google for "Matlab rename field".
2 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Structures en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!