Відповіді:
Я думаю, що наступний код може зробити трюк:
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')
Починаючи з 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))
Найкоротший код:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
[~,ind]=ismember('KU', strs)
Але він повертає лише першу позицію в strs
. Якщо елемент не знайдено, тоді ind=0
.
Функції strcmp і strcmpi - це найбільш прямий спосіб зробити це. Вони шукають масиви.
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ix = find(strcmp(strs, 'KU'))
ти спробував
indices = Find(strs, 'KU')
див. посилання
альтернативно,
indices = strfind(strs, 'KU');
також повинен працювати, якщо я не помиляюся.