如果我有一个结构如:
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 - 时间,取决于我正在运行的特定程序的需求。
答案 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);