2016-06-21 5 views
0

У меня есть структура структуры 1x10 с большим количеством полей, и я хотел бы удалить из массива struct элемент с определенным значением в одной из переменных поля. Я знаю значение im ищет и поле, которое я должен искать, и также знаю, как удалить элемент из массива struct, как только я его найду. Вопрос заключается в том, как (если возможно) элегантно идентифицировать его, не проходя через решение грубой силы, то есть цикл for, который проходит через элементы массива struct, чтобы сравнить со значением, которое я ищу. Пример код: покупатели как 1x10 STRUCT массив с полями: ид, п, бюджет и переменная, чтобы найти в значениях Ид как id_test = 12Поиск элемента структуры на основе значения поля

ответ

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')); 
+0

Это именно то, что я искал! Однострочный, который не только идентифицирует элемент, который мне нужно удалить через одно из его полей, но и удаляет его. Благодаря! – Leon

 Смежные вопросы

  • Нет связанных вопросов^_^