Comment rechercher une chaîne dans un tableau de cellules dans MATLAB?

Disons que j’ai le tableau de cellules

strs = {'HA' 'KU' 'LA' 'MA' 'TATA'} 

Que dois-je faire si je veux trouver l’index de 'KU' ?

Je suppose que le code suivant pourrait faire l’affaire:

 strs = {'HA' 'KU' 'LA' 'MA' 'TATA'} ind=find(ismember(strs,'KU')) 

Cela revient

 ans = 2 
 >> strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}; >> tic; ind=find(ismember(strs,'KU')); toc 

Le temps écoulé est de 0,001976 seconde.

 >> tic; find(strcmp('KU', strs)); toc 

Le temps écoulé est de 0,000014 secondes.

Donc, clairement, strcmp('KU', strs) prend beaucoup moins de temps que ismember(strs,'KU')

Depuis 2011a, la méthode recommandée est la suivante:

 booleanIndex = strcmp('KU', strs) 

Si vous voulez obtenir l’index entier (dont vous n’avez souvent pas besoin), vous pouvez utiliser:

 integerIndex = find(booleanIndex); 

strfind est obsolète, alors essayez de ne pas l’utiliser.

Je vois que tout le monde a manqué la faille la plus importante de votre code:

 strs = {'HA' 'KU' 'LA' 'MA' 'TATA'} 

devrait être:

 strs = {'HA' 'KU' 'NA' 'MA' 'TATA'} 

ou

 strs = {'HAKUNA' 'MATATA'} 

Maintenant, si vous vous en tenez à utiliser

 ind=find(ismember(strs,'KU')) 

Vous n’aurez pas de soucis :).

D’autres réponses sont probablement plus simples pour ce cas, mais pour être complet je pensais append l’utilisation de Cellfun avec une fonction anonyme

 indices = find(cellfun(@(x) strcmp(x,'KU'), strs)) 

ce qui a l’avantage de pouvoir facilement la rendre insensible à la casse ou de l’utiliser dans les cas où vous avez un tableau de structures de cellules:

 indices = find(cellfun(@(x) strcmpi(x.ssortingngfield,'KU'), strs)) 

Les fonctions strcmp et strcmpi sont le moyen le plus direct de le faire. Ils recherchent à travers des tableaux.

 strs = {'HA' 'KU' 'LA' 'MA' 'TATA'} ix = find(strcmp(strs, 'KU')) 

Code le plus court:

 strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}; [~,ind]=ismember('KU', strs) 

Mais il ne renvoie que la première position dans strs . Si élément non trouvé alors ind=0 .

as-tu essayé

 indices = Find(strs, 'KU') 

voir le lien

alternativement,

 indices = strfind(strs, 'KU'); 

devrait également fonctionner si je ne me trompe pas.