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

92
demandé sur Dennis Jaheruddin 2011-11-09 10:47:52

8 réponses

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

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

Cela renvoie

ans = 
     2
116
répondu Vidar 2016-04-28 15:49:26
>> 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')

85
répondu Pankaj Gupta 2013-09-06 07:33:51

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

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.

39
répondu Andrey Rubshtein 2012-11-07 19:30:34

Je vois que tout le monde a manqué la faille la plus importante dans 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 soucis :).

22
répondu Curt 2013-11-06 01:59:06

D'autres réponses sont probablement plus simples pour 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))

Qui a l'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))
12
répondu robince 2011-11-09 07:48:51

Les fonctions strcmp et strcmpi sont le moyen le plus direct de le faire. La recherche par le biais de réseaux.

strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ix = find(strcmp(strs, 'KU'))
5
répondu Andrew Janke 2012-02-24 15:15:59

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'élément n'est pas trouvé alors ind=0.

5
répondu Maxim Suslov 2014-09-16 20:08:00

Avez-vous essayé

indices = Find(strs, 'KU')

Voir lien

Sinon,

indices = strfind(strs, 'KU');

Devrait aussi fonctionner si Je ne me trompe pas.

-2
répondu Tom 2011-11-09 06:57:35