删除特定索引处的结构的所有字段

时间:2017-10-03 12:07:12

标签: arrays matlab struct

如果我有一个结构如:

myStruct = struct('a',[1,2,3],'b',[1,2,3],'c',[1,2,3])

...我想删除每个字段的第二个元素,我会执行以下操作:

myStruct.a(2) = [];
myStruct.b(2) = [];
myStruct.c(2) = [];

是否有更简单的方法来执行此操作,即不涉及手动写出每个字段名称的操作?我的结构可能会在不同的情况下继承几个不同的字段,因此我永远无法明确知道哪些字段会出现以便对其进行硬编码。即使我 知道,也可能需要多行!

注意:我知道可以以myStruct(2).a的格式排列结构,但我更喜欢格式myStruct.a(2),因为它允许我在结构中添加字段1-at-a - 时间,取决于我正在运行的特定程序的需求。

2 个答案:

答案 0 :(得分:2)

您知道fieldnames和动态字段名吗?

fnames = fieldnames ( myStruct )
for ii=1:length(fnames)
   myStruct.(fnames{ii})(2) = [];
end

答案 1 :(得分:2)

您可以使用structured programming paradigm将匿名函数应用于每个字段:

myStruct = structfun(@(x) x([1 3:end]), myStruct, 'UniformOutput', false);