Diciamo che ho l’array di celle
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
Cosa devo fare se voglio trovare l’indice di 'KU'
?
Credo che il seguente codice potrebbe 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.
SO, chiaramente strcmp('KU', strs)
richiede molto meno tempo di ismember(strs,'KU')
Dal 2011a, il modo consigliato è:
booleanIndex = strcmp('KU', strs)
Se si desidera ottenere l’indice intero (che spesso non è necessario), è ansible utilizzare:
integerIndex = find(booleanIndex);
strfind
è deprecato, quindi prova a non usarlo.
Vedo che tutti hanno perso il difetto più importante nel codice:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
dovrebbe essere:
strs = {'HA' 'KU' 'NA' 'MA' 'TATA'}
o
strs = {'HAKUNA' 'MATATA'}
Ora se ti limiti ad 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 è ansible renderlo facilmente insensibile alle maiuscole o usarlo nei casi in cui si dispone di una matrice cellulare di strutture:
indices = find(cellfun(@(x) strcmpi(x.stringfield,'KU'), strs))
Le funzioni strcmp e strcmpi sono il modo più diretto per farlo. Cercano attraverso gli array.
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'} ix = find(strcmp(strs, 'KU'))
Il codice più breve:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}; [~,ind]=ismember('KU', strs)
Ma restituisce solo la prima posizione in strs
. Se elemento non trovato, ind=0
.
hai provato
indices = Find(strs, 'KU')
vedi link
in alternativa,
indices = strfind(strs, 'KU');
dovrebbe funzionare anche se non sbaglio.