Borrar filtros
Borrar filtros

How to remove struct fields of a specific type

16 visualizaciones (últimos 30 días)
Joe Gibbs
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!

Respuesta aceptada

Paul
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
s = struct with fields:
w: 0 x: 1 y: 2 z: 3
% 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
s = struct with fields:
x: 1 y: 2
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.

Más respuestas (1)

sushma swaraj
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!

Categorías

Más información sobre Data Type Identification en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2023a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by