Скажем, у меня есть массив ячеек
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
Что делать, если я хочу найти индекс 'KU'
?
Скажем, у меня есть массив ячеек
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
Что делать, если я хочу найти индекс 'KU'
?
Я думаю, следующий код мог бы сделать трюк:
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 секунд.
SO, очевидно, strcmp('KU', strs)
занимает гораздо меньшее время, чем ismember(strs,'KU')
С 2011 года рекомендуемый способ:
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');
также должен работать, если я не ошибаюсь.