2013-02-20 54 views
3

新Matlab的來自C/C++ ......Matlab的OOP訪問來自一個對象數組

性能我有對象的數組,我試圖訪問每一個對象的值在數組並將它們連接成一個變量。

Class sample 
    properties(GetAccess = 'public', SetAccess ='public') 
    ID; 
    Value; 
    end 

    methods 
     function obj = sample(id, value) 
      obj.ID = id; 
      obj.Value = value; 
     end 
    end 
end 

然後我製作一個包含一些對象的矩陣。

x = sample.empty(3,0); 
x(1) = sample(1,3); 
x(2) = sample(1,4); 
x(3) = sample(1,5); 

然後我想從對象中獲取所有的值並將它們存儲到一個新的數組中。

y = x(:).Value; 

然而,這種失敗,僅把X(3)的值成Y .....和:

y(:) = x(:).Value; 

引發錯誤。

任何幫助,將不勝感激。我知道我可以用循環做到這一點,但我試圖以最快和最有效的方式做到這一點。

回答

5

簡單而直觀

y=[x.Value] 

爲什麼?那麼x.Value不是連續的內存塊,所以不能直接分配給數組。調用x.Value將依次從每個x對象返回值數據成員。 Matlab將其視爲單獨的操作。通過在[]中包含呼叫,您正在告訴matlab通過連接每個結果來制定一個連續的數組。然後這可以分配給一個雙打數組y

編輯:

關於你的評論,如果x是不同的對象,即不同長度的上面的代碼工作正常。 。

x(1) = sample(1,3); 
x(2) = sample(1,[4 5 6]); 
x(3) = sample(1,[20 10]); 

然後

>> [x.Value] 

ans = 

    3  4  5  6 20 10 

如果意思是要「Y」是一個粗糙的端載體等是可能的矢量的C++中的矢量,則需要使用單元陣列符號(花括號)

>> y = {x.Value} 

y = 

    [3] [1x3 double] [1x2 double] 
+1

那麼如果x.Value中的值有不同的長度... – Neppinger 2013-02-20 18:11:15

+0

又名x擁有數組,但它們的長度不相等。 – Neppinger 2013-02-20 18:13:15

+1

查看我的編輯以獲取詳細信息。 'x'包含一個'sample'類的數組。非嚴格類型的歡樂! – learnvst 2013-02-20 18:20:14