对于此示例对象:
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,但每次都可能不同。
答案 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
。
但是,您应该记住,这些操作很昂贵,因为遍历了整个数组。如果您可以为对象定义类型double
,single
,char
数组,有符号或无符号32位或64位整数的唯一键,则可以将它们存储在containers.Map
。
在此示例中,您使用句柄类。如果需要值类,还需要在其上定义矢量化eq()方法。