从数组中删除matlab对象,删除空数组空间

时间:2012-10-27 13:01:13

标签: oop matlab

对于此示例对象:

    classdef TestObject < handle
    %UNTITLED Summary of this class goes here
    %   Detailed explanation goes here

    properties
        a;
    end

    methods
    end

end

和这个示例脚本:

 tbarray = TestObject.empty();

for i=1:3
    newTestObject=TestObject;
    newTestObject.a=i;
    if(i==1)
        firstTestObject=newTestObject;
    end
    tbarray(end+1,1)=newTestObject;
end
delete (firstTestObject) ;

执行此操作后,tbarray第一个位置有一个空的TestObject。是否可以调整tbarray的大小,删除空对象或使用某种删除调用,例如

index=tbarray.remove(firstObject);
tbarray.add(index,laterTestObject);

tbarray.Replace(firstObject,laterObject);

更新 我如何找到要删除/替换的对象的数组索引。此示例使用1,但每次都可能不同。

1 个答案:

答案 0 :(得分:1)

tbarray(1) = []将删除索引1并调整数组大小(因此它现在减少了1个长度)。 tbarray(1) = laterObject将替换为索引1。

在Matlab中没有任何类(而不仅仅是基元/字符串)的键的Set或Map,所以tbarray.Replace(firstObject,laterObject);之类的东西几乎不可能在不知道索引的情况下实现。


修改
如果要查找数组中某些元素出现的索引,可以使用find(tbarray == firstObject) 请注意,tbarray == firstObject返回一个逻辑数组,该数组可以直接用作索引,例如tbarray(tbarray == firstObject) = []tbarray(tbarray == firstObject) = laterObject

但是,您应该记住,这些操作很昂贵,因为遍历了整个数组。如果您可以为对象定义类型doublesinglechar数组,有符号或无符号32位或64位整数的唯一键,则可以将它们存储在containers.Map

在此示例中,您使用句柄类。如果需要值类,还需要在其上定义矢量化eq()方法。