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.