web-dev-qa-db-fra.com

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'?

99
Benjamin

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

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

Cela retourne

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

Le temps écoulé est de 0.001976 secondes.

>> 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')

90
Pankaj Gupta

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, essayez donc de ne pas l'utiliser.

39
Andrey Rubshtein

Je vois que tout le monde a raté 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 aurez pas de souci :).

23
Curt

Les autres réponses sont probablement plus simples dans ce cas, mais pour être complet, j’ai pensé ajouter l’utilisation de cellfun avec une fonction anonyme.

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

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

indices = find(cellfun(@(x) strcmpi(x.stringfield,'KU'), strs))
13
robince

Le code le plus court:

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

Mais il ne retourne que la première position dans strs. Si l'élément n'est pas trouvé, alors ind=0.

6
Maxim Suslov

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

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