Я определил класс дескриптора объекта в MATLAB, который выглядит следующим образом:
classdef object < handle
properties
size
neighbour
end
methods
function g = object(size)
g.size = size;
g.neighbour = object.empty(0,0);
end
function link_g2g(g,neighbour)
g.neighbour(end+1)=neighbour;
neighbour.neighbour(end+1)=g;
end
end
end
Как вы можете видеть, возможно, что эти объекты связаны вместе свойством neighbour
.
Теперь мне нужно эффективно удалить эти ссылки. Сначала я подумал, что ссылки - это просто указатели на один из объектов, и если бы я удалил object(x)
, который, например, связан с object(y)
:
object(x).neighbour(z)==object(y)
и object(y).neighbour(p)==object(x)
, то я бы также удалил object(x)
как сосед object(y)
. Но, похоже, это не так, поскольку это не указатель, а какое-то рекурсивное определение.
delete(object(x))
удаляет объект, а также показывает удаленный объект при доступе к object(y).neighbour(p)
, но количество соседей все то же самое. Список соседей теперь - это просто количество существующих объектов и один удаленный объект. Это мешает мне получить доступ к свойствам таким образом: [object(y).neighbour.size]
, потому что для удаленного соседа свойство недоступно.
Прямо сейчас я всегда l oop по всем соседям объекта, который я хочу удалить, выяснить, какой из их соседей является объектом, который я хочу удалить, и удалим ссылки:
objects(y).neighbour(p)=[]
objects(a).neighbour(b)=[]
objects(d).neighbour(f)=[]
% etc...
object(x)=[]
Должен быть более эффективный способ сделать это? Должен ли я изменить способ соединения объектов, чтобы достичь желаемого?