【问题标题】:Remove all fields of a struct at a specific index删除特定索引处结构的所有字段
【发布时间】:2017-10-03 12:07:12
【问题描述】:

如果我有这样的结构:

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) 格式,因为它允许我一次向结构添加字段,具体取决于根据我正在运行的特定程序的需要。

【问题讨论】:

    标签: arrays matlab struct


    【解决方案1】:

    您可以使用structfun 对每个字段应用匿名函数:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2012-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-03
        • 1970-01-01
        • 1970-01-01
        • 2014-03-26
        相关资源
        最近更新 更多