Odpowiedzi:
Myślę, że poniższy kod może załatwić sprawę:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ind=find(ismember(strs,'KU'))
To wraca
ans =
2
>> strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
>> tic; ind=find(ismember(strs,'KU')); toc
Upłynęło 0,001976 sekund.
>> tic; find(strcmp('KU', strs)); toc
Upłynęło 0,000014 sekund.
WIĘC, wyraźnie strcmp('KU', strs)
zajmuje znacznie mniej czasu niżismember(strs,'KU')
Od 2011a zalecanym sposobem jest:
booleanIndex = strcmp('KU', strs)
Jeśli chcesz uzyskać indeks całkowity (którego często nie potrzebujesz), możesz użyć:
integerIndex = find(booleanIndex);
strfind
jest przestarzały, więc staraj się go nie używać.
Widzę, że wszyscy przegapili najważniejszy błąd w Twoim kodzie:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
Powinien być:
strs = {'HA' 'KU' 'NA' 'MA' 'TATA'}
lub
strs = {'HAKUNA' 'MATATA'}
Teraz, jeśli będziesz używać
ind=find(ismember(strs,'KU'))
Nie będziesz miał zmartwień :).
Inne odpowiedzi są prawdopodobnie prostsze w tym przypadku, ale dla kompletności pomyślałem, że dodam użycie cellfun z anonimową funkcją
indices = find(cellfun(@(x) strcmp(x,'KU'), strs))
co ma tę zaletę, że można łatwo uczynić ją niewrażliwą na wielkość liter lub użyć jej w przypadkach, gdy masz tablicę komórek struktur:
indices = find(cellfun(@(x) strcmpi(x.stringfield,'KU'), strs))
Najkrótszy kod:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
[~,ind]=ismember('KU', strs)
Ale zwraca tylko pierwszą pozycję w strs
. Jeśli element nie został znaleziony, to ind=0
.
Funkcje strcmp i strcmpi to najbardziej bezpośredni sposób na zrobienie tego. Przeszukują tablice.
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ix = find(strcmp(strs, 'KU'))
Próbowałeś
indices = Find(strs, 'KU')
zobacz link
alternatywnie,
indices = strfind(strs, 'KU');
powinien również działać, jeśli się nie mylę.