如何在向量中存储对象?

时间:2014-08-24 12:50:38

标签: matlab

基本上我想要做的是定义一个空向量,然后在for循环中用一些对象填充它,比如

status = [];
while(sweepLine.y > 0)
    for i = 1 : m
       isSweeped = IsBeingSweeped(Sections(i), sweepLine);
       if(isSweeped == 1)
       status(i) = Sections(i);
     end
     sweepLine.y = sweepLine.y - 1;
 end

但是,matlab只是告诉我错误, 从Section转换为double时发生以下错误: 使用double时出错 无法从Section转换为double。

tryGOX出错(第41行)         status(i)= Section(i);

如果我想在Java中做同样的事情,我可能会写

Section[] status = new Section[10];
while(sweepLine.y > 0){
    for(int i = 0; i < 10; i ++){
       isSweeped = IsBeingSweeped(Sections[i], sweepLine);
       if(isSweeped == 1)
       status[i] = Sections[i];
     }
    sweepLine.y = sweepLine.y - 1;
 }

我怎么能在Matlab中做到这一点?

谢谢

3 个答案:

答案 0 :(得分:0)

有很多缺乏信息。一些猜测:

status是一个功能。不要将它用作变量。更改其名称并尝试错误是否仍然存在。

您说Sections包含对象。您不能将对象存储在双数组中。改为使用cell array

sectionStatus{i} = Sections(i);

甚至更好:

sectionStatus{ii} = Sections(ii);

因为i是虚构的单位,当你覆盖它时它可能会引起麻烦。 (虽然在较新版本的Matlab中没有那么多麻烦,如果有的话)。


更复杂的方法是使用 structs

getobjname = @(x) inputname(1);
sectionStatus = struct;

while(sweepLine.y > 0)
    for ii = 1 : m
       isSweeped = IsBeingSweeped(Sections(ii), sweepLine);
       if(isSweeped == 1)
          sectionStatus.( getobjname(Sections(ii)) ) = Sections(ii);
       end
       sweepLine.y = sweepLine.y - 1;
    end
 end

它将为您提供一个包含所有部分的结构,其中包含类实例的名称。我猜,实际上是变量Sections的构建方式。

答案 1 :(得分:0)

如果您知道尺寸,可以预先分配。

status= zeros(size);

欢呼声

答案 2 :(得分:0)

理想情况下,如果你知道你可以做的尺寸:

status = zeros(N);

或:

status(N) = 0;

如果你不知道大小,那么在你的for循环中,你可以写:

status(end+1) = Sections(i);