Matlab OOP从对象数组访问属性

Nep*_*ger 3 arrays oop matlab matrix

Matlab新手来自C/C++ ......

我有一个对象数组,我正在尝试访问数组中每个对象的值,并将它们连接成一个变量.

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 
Run Code Online (Sandbox Code Playgroud)

然后我制作一个包含一些对象的矩阵.

x = sample.empty(3,0);
x(1) = sample(1,3);
x(2) = sample(1,4);
x(3) = sample(1,5);
Run Code Online (Sandbox Code Playgroud)

然后我想从对象中获取所有值并将它们存储到一个新数组中.

y = x(:).Value;
Run Code Online (Sandbox Code Playgroud)

然而,这失败了,只将x(3)的值放入y ......和:

y(:) = x(:).Value; 
Run Code Online (Sandbox Code Playgroud)

引发错误.

任何帮助,将不胜感激.我知道我可以通过循环来做到这一点,但我正在尝试以最快和最有效的方式做到这一点.

lea*_*vst 5

简单但不直观

y=[x.Value]
Run Code Online (Sandbox Code Playgroud)

为什么?好x.Value不是一个连续的内存块,所以不能直接分配给一个数组.调用依次x.Value返回每个x对象的Value数据成员.Matlab将此视为单独的操作.通过将调用包含在内,[]你告诉matlab通过连接每个结果来形成一个连续的数组.然后可以将其分配给双精度数组y.

编辑:

关于你的评论,如果x在不同的对象中具有不同的长度,则上述代码可以正常工作..

x(1) = sample(1,3);
x(2) = sample(1,[4 5 6]);
x(3) = sample(1,[20 10]);
Run Code Online (Sandbox Code Playgroud)

然后

>> [x.Value]

ans =

     3     4     5     6    20    10
Run Code Online (Sandbox Code Playgroud)

如果你的意思是你想要'y'是一个参差不齐的结束向量,就像C++中的向量向量一样,你需要使用单元格数组表示法(花括号)

>> y = {x.Value}

y = 

    [3]    [1x3 double]    [1x2 double]
Run Code Online (Sandbox Code Playgroud)