it-swarm.com.ru

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

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

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

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

98
Benjamin

Я думаю, что следующий код мог бы добиться цели:

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

Это возвращает

ans = 
     2
126
Vidar
>> 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')

90
Pankaj Gupta

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

booleanIndex = strcmp('KU', strs)

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

integerIndex = find(booleanIndex);

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

39
Andrey Rubshtein

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

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

должно быть:

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

или же

strs = {'HAKUNA' 'MATATA'}

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

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

Вы будете иметь не беспокойтесь :).

23
Curt

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

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

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

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

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

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

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

6
Maxim Suslov

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

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