Если я правильно понял ваш вопрос, то предположим, что у вас есть следующий массив ячеек:
a = cell();
a{1} = struct('a', 1, 'b', 'dwn', 'c', 2);
a{2} = struct('a', 2, 'b', 'notdwn', 'c', 3);
a{3} = struct('a', 3, 'b', 'dwn', 'c', 4);
a{4} = struct('a', 4, 'b', 'dwn', 'c', 5);
Я думаю, что проще всего было бы сначала преобразовать его в массив структуры. Вы можете сделать это легко с помощью синтаксиса «генератора последовательностей», то есть
s = [a{:}]; % collect all cell elements as a sequence, then wrap into an array
. Если вы отвечаете за этот код, то вместо этого я бы просто создал структурный массив вместо массива ячеек с самого начала.
Как только вы это сделаете, вы снова можете использовать синтаксис «генератора последовательностей» в массиве struct с соответствующей функцией, которая проверяет равенство. В вашем случае вы могли бы сделать что-то вроде этого:
strcmp( {s.b}, 'dwn' )
% ans = 1 0 1 1
s.b
обращается к полю 'b' в каждом элементе массива структуры, возвращая его в виде списка через запятую. Заключение в скобки приводит к тому, что эта последовательность становится массивом ячеек. Затем вы передаете полученный массив ячеек строк в strcmp, чтобы сравнить каждый элемент со строкой 'dwn'.
В зависимости от того, что вы хотите сделать дальше, вы можете использовать этот логический массив в качестве индекса для вашей структуры. массив, чтобы изолировать только структуры, которые содержат это значение et c.
Очевидно, что это быстрый способ сделать это, если вы можете создавать последовательности таким образом. Если нет, общая идея остается в силе, и вы можете повторить, используя традиционный цикл for et c.