Как правильно удалить рекурсивно определенные объекты в MATLAB - PullRequest
1 голос
/ 14 июля 2020

Я определил класс дескриптора объекта в 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)=[]

Должен быть более эффективный способ сделать это? Должен ли я изменить способ соединения объектов, чтобы достичь желаемого?

...