Matlab中的动态对象数组

时间:2014-03-27 19:06:03

标签: arrays matlab object dynamic

我创建了这两个代码类。

classdef master < matlab.mixin.Copyable


  properties
      id
      list
   end
   methods
        function this=master(id)             
            if nargin > 0
                this.id = id;
                this.list = repmat(msg,1,20);
            end
        end 
   end
end

classdef msg < matlab.mixin.Copyable


 properties
      id
      dest
      ttl
   end
   methods
        function this=msg(id,dest,ttl)             
            if nargin > 0
                this.id = id;
                this.dest = dest;
                this.ttl = ttl;
            end
        end 
   end
end

在我的代码的另一部分中,我尝试使用以下内容从数组“master.list”中删除一个或多个objetc“msg”:

   function verifyMsgToDiscard(this,t)
        i = 1;
        while (i <= numel(this.list))
            m = this.list(i);
            if (t > m.ttl)
               this.list = this.list(this.list~=m); %remove m of the list
               clear m; %delete m from the system
            end 
            i= i + 1;
        end
    end

我收到错误:

指数超出矩阵维度。

master / verifyMsgToDiscard出错(第117行)                 m = this.list(i);

我认为这个问题就是为什么我在master.list上迭代,同时我修改了它上面的元素数量。另外我可以在“列表”中添加和删除新对象“msg”,然后它的大小会有所不同。我怎样才能以动态的方式做到这一点。

1 个答案:

答案 0 :(得分:1)

我想您正在尝试删除ttl小于t的msg对象。这是删除元素的Matlab方法:

this.list = this.list(t <= [this.list.ttl]);

请注意,t <= [this.list.ttl]会生成逻辑索引。