Вы мутируют структуру в цикле for
путем удаления элементов в этой структуре, но забывая о том, что длина изменения структуры, как вы удаляете элементы. Таким образом, длина структуры уменьшает с каждым удалением, и вы, в конечном счете, выходите из пределов при удалении элементов. В частности, вы использовали length
, чтобы зафиксировать начальную длину списка, но по мере удаления элементов эта длина уже не совпадает и цикл for
не знает этого факта. Таким образом, вы в конечном итоге получите ошибку вне границ из-за этого ошибочного удаления элементов.
Способ решения этой проблемы было бы сохранить все места, которые должны быть удалены из структуры и, когда цикл for
делается, удалить их все сразу:
function L = remove_all(L,E)
% remove_all(List,element) - delete all occurrences of E from L
indices = []; %// New - keep the locations that need to be removed
for Index = length(L.elements):-1:1
if isequal(E,L.elements{Index})
indices = [indices; Index]; %// Add to list if equal
end
end
L.elements(indices) = []; %// Remove all entries at once
Мы не против читателей. ** Что именно представляет собой ошибка MATLAB? ** Также дайте ожидаемые входы и выходы. Во-первых, я не знаю, что такое 'L', и что должно содержать поле' elements'. – rayryeng
Согласен, вопрос будет намного лучше, если вы отредактируете его, чтобы объяснить, что вы ожидали увидеть и что вы на самом деле видите. – paisanco
Какая ошибка вы получили ...? Пожалуйста, укажите это в сообщении. –