У меня есть массив ячеек (п-по-1 размер), содержащий обе строки и ячейки, которая выглядит примерно такMatlab найти строку в массив ячеек
{
{'r1'} % -> cell content is in format 'char'
{'r2'} % -> cell content is in format 'char'
{1x2 cell} % -> cell content is a cell array: [{'r1'}{'r2'}]
{'r3'} % -> cell content is in format 'char'
{1x2 cell} % -> cell content is a cell array: [{'r1'}{'r3'}]
{1x2 cell} % -> cell content is a cell array: [{'r2'}{'r3'}]
{1x3 cell} % -> cell content is a cell array: [{'r1'}{'r2'}{'r3'}]
...
}
мне нужно найти строку-индекс, где включена какая-либо строка, например 'R2'. Я обычно использую для этой цели strfind
, который отлично работает, если массив ячеек имеет согласованный формат (следовательно, «char'-format» в каждой ячейке).
Можно ли применить эту функцию к структуре массива ячеек, которая отображается выше?
Спасибо!
РЕДАКТИРОВАТЬ: Приложите три изображения, показывающие структуру данных, которую я использую, поскольку я не уверен, как точно показать/объяснить иерархии и слои массива ячеек в тексте. Надеюсь, это поможет. Также найдите прилагаемый результат кода.
код используется:
change = 'r1.m';
srch = cellfun(@(x) strfind(x, change), strats, 'UniformOutput', false);
stringInRow = cellfun(@(x) numel(x) == 1 || (numel(x)>1)*numel(cell2mat(x))>0, srch);
rows = find(stringInRow);
небольшая ошибка: похоже, вы имеете в виду использование 'c {3} {2}' второй раз вместо 'c {5} {2}'. Можете ли вы пояснить, почему поиск в этом массиве клеток возвращает этот ответ? Как я вижу, мачта будет '0 1 1 0 0', потому что' c {2} = 'r2'' и 'c {3} {2} =' r2''. Итак, почему это '0 1 0 0 1'? –
Наверное, я избил вас, чтобы исправить свою ошибку (в течение 5 минут тоже :)) перед вашим комментарием. С помощью этого исправления поиск возвращает '0 1 1 0 0', как и следовало ожидать. Хороший улов, хотя! – dfri
ах, действительно! Я должен был сначала обновить его! Вы слишком быстро, D –