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');должны также работать, если я не ошибаюсь.
Comments