Risposte:
Immagino che il seguente codice possa fare il trucco:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ind=find(ismember(strs,'KU'))
Questo ritorna
ans =
2
>> strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
>> tic; ind=find(ismember(strs,'KU')); toc
Il tempo trascorso è 0,001976 secondi.
>> tic; find(strcmp('KU', strs)); toc
Il tempo trascorso è 0,000014 secondi.
Quindi, chiaramente strcmp('KU', strs)
richiede molto meno tempo rispetto aismember(strs,'KU')
Dal 2011a, il modo consigliato è:
booleanIndex = strcmp('KU', strs)
Se vuoi ottenere l'indice intero (che spesso non ti serve), puoi usare:
integerIndex = find(booleanIndex);
strfind
è deprecato, quindi cerca di non usarlo.
Vedo che tutti hanno perso il difetto più importante nel tuo codice:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
dovrebbe essere:
strs = {'HA' 'KU' 'NA' 'MA' 'TATA'}
o
strs = {'HAKUNA' 'MATATA'}
Ora, se continui a usare
ind=find(ismember(strs,'KU'))
Non avrai preoccupazioni :).
Altre risposte sono probabilmente più semplici per questo caso, ma per completezza ho pensato di aggiungere l'uso di cellfun con una funzione anonima
indices = find(cellfun(@(x) strcmp(x,'KU'), strs))
che ha il vantaggio che puoi facilmente renderlo insensibile alle maiuscole o usarlo nei casi in cui hai un array di celle di strutture:
indices = find(cellfun(@(x) strcmpi(x.stringfield,'KU'), strs))
Codice più breve:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
[~,ind]=ismember('KU', strs)
Ma ritorna solo in prima posizione strs
. Se l'elemento non viene trovato, allora ind=0
.
Le funzioni strcmp e strcmpi sono il modo più diretto per farlo. Cercano negli array.
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ix = find(strcmp(strs, 'KU'))