У меня есть структура структуры 1x10 с большим количеством полей, и я хотел бы удалить из массива struct элемент с определенным значением в одной из переменных поля. Я знаю значение im ищет и поле, которое я должен искать, и также знаю, как удалить элемент из массива struct, как только я его найду. Вопрос заключается в том, как (если возможно) элегантно идентифицировать его, не проходя через решение грубой силы, то есть цикл for, который проходит через элементы массива struct, чтобы сравнить со значением, которое я ищу. Пример код: покупатели как 1x10 STRUCT массив с полями: ид, п, бюджет и переменная, чтобы найти в значениях Ид как id_test = 12Поиск элемента структуры на основе значения поля
0
A
ответ
1
Вы можете использовать тот факт, что если у вас есть массив struct
с , и вы используете привязку точек, это создает comma-separated list. Если вы вложите это в []
, он попытается создать массив, и если вы заключите его в {}
, он будет принудительно введен в массив ячеек.
a(1).value = 1;
a(2).value = 2;
a(3).value = 3;
% Into an array
[a.value]
% 1 2 3
% Into a cell array
{a.value}
% [1] [2] [3]
Так, чтобы сделать ваше сравнение, вы можете преобразовать поле, которое вы заботитесь о в любом массиве массив ячеек, чтобы сделать сравнение. Затем это сравнение даст логический массив, который можно использовать для индексации в исходную структуру.
Например
% Some example data
s = struct('id', {1, 2, 3}, 'n', {'a', 'b', 'c'}, 'Budget', {100, 200, 300});
% Remove all entries with id == 2
s = s([s.id] ~= 2);
% Remove entries that have an id of 2 or 3
s = s(~ismember([s.id], [2 3]));
% Find ones with an `n` of 'a' (uses a cell array since it's strings)
s = s(ismember({s.id}, 'a'));
Это именно то, что я искал! Однострочный, который не только идентифицирует элемент, который мне нужно удалить через одно из его полей, но и удаляет его. Благодаря! – Leon