How to remove struct fields of a specific type
16 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Joe Gibbs
el 7 de Jul. de 2023
Respondida: Paul
el 7 de Jul. de 2023
I have a struct that contains data of various formats including further structs and instances of class objects. I would like to remove all fields that are of a specific type without needing to use their field names.
For example, the trackingScenario struct contains a varying number of "Tracker" objects that I would like to remove if desired. I have posted an example of the struct below.
struct with fields:
configData: [1×1 struct]
simulation: [1×1 struct]
Platform_1: [1×1 struct]
Platform_2: [1×1 struct]
Platform_3: [1×1 struct]
Platform_4: [1×1 struct]
Target_1: [1×1 struct]
Target_2: [1×1 struct]
new_test_tracker2: [1×1 Tracker]
The desired output would be the struct without the "Tracker" field. This has stumped me so thanks in advance!
0 comentarios
Respuesta aceptada
Paul
el 7 de Jul. de 2023
The function class can be used in a loop over the fieldnames to identify the fields to be removed with rmfield.
s.w = int32(0);
s.x = 1;
s.y = 2;
s.z = int32(3);
s
% remove the int32 fields
fnames = fieldnames(s);
for ii = 1:numel(fnames)
if string(class(s.(fnames{ii}))) == "int32"
s = rmfield(s,fnames{ii});
end
end
s
The function isa might also do the job of identifying the field to be removed, depending on the class hierarchy and if you want to remove objects basedon their superclass.
0 comentarios
Más respuestas (1)
sushma swaraj
el 7 de Jul. de 2023
Hi,
You can use the rmfield function to remove a specified field from structure array.
Refer to this documentation :
Hope it helps!
0 comentarios
Ver también
Categorías
Más información sobre Data Type Identification en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!