2014-03-27 26 views
0

我已經創建了這兩個代碼類。Matlab中的動態對象數組

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「味精」另一部分使用下列內容:

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 

我收到錯誤:

索引超出矩陣尺寸。 (第117行) m = this.list(i);

我想這個問題是爲什麼我在修改master.list中的元素數量的同時迭代master.list。另外,我可以在「列表」中添加和刪除新的對象「msg」,然後它的大小會變化。我如何以動態的方式做到這一點。

回答

1

我想你試圖刪除具有ttl小於t的msg對象。這是去除元件的Matlab的方式:

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

注意t <= [this.list.ttl]生成邏輯索引。