Как искать строку в массиве ячеек в MATLAB?

Допустим у меня есть массив ячеек

strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}

Что делать, если я хочу найти индекс 'KU'?

8 ответов


Я думаю, что следующий код может сделать трюк:

strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ind=find(ismember(strs,'KU'))

возвращает

ans = 
     2

>> strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
>> tic; ind=find(ismember(strs,'KU')); toc

прошедшее время 0,001976 секунды.

>> tic; find(strcmp('KU', strs)); toc

прошедшее время составляет 0,000014 секунды.

так, ясно strcmp('KU', strs) занимает гораздо меньше времени, чем ismember(strs,'KU')


С 2011a, рекомендуемый способ:

booleanIndex = strcmp('KU', strs)

Если вы хотите получить целочисленный индекс (который вам часто не нужен), вы можете использовать:

integerIndex = find(booleanIndex);

strfind устарел, поэтому постарайтесь не использовать его.


Я вижу, что все пропустили самый важный недостаток в вашем коде:

strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}

должно быть:

strs = {'HA' 'KU' 'NA' 'MA' 'TATA'} 

или

strs = {'HAKUNA' 'MATATA'}

теперь, если вы придерживаетесь использования

ind=find(ismember(strs,'KU'))

вы не беспокойтесь :).


другие ответы, вероятно, проще для этого случая, но для полноты я думал, что добавлю использование cellfun с анонимной функцией

indices = find(cellfun(@(x) strcmp(x,'KU'), strs))

который имеет то преимущество, что вы можете легко сделать его нечувствительным к регистру или использовать его в случаях, когда у вас есть массив ячеек структур:

indices = find(cellfun(@(x) strcmpi(x.stringfield,'KU'), strs))

функции strcmp и strcmpi являются наиболее прямым способом сделать это. Они ищут через массивы.

strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ix = find(strcmp(strs, 'KU'))

самый короткий код:

strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
[~,ind]=ismember('KU', strs)

но он возвращает только первую позицию в strs. Если элемент не найден, то ind=0.


ты

indices = Find(strs, 'KU')

посмотреть ссылке

кроме того,

indices = strfind(strs, 'KU');

также должен работать, если я не ошибаюсь.