Antworten:
Ich denke, der folgende Code könnte den Trick machen:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ind=find(ismember(strs,'KU'))
Dies kehrt zurück
ans =
2
>> strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
>> tic; ind=find(ismember(strs,'KU')); toc
Die verstrichene Zeit beträgt 0,001976 Sekunden.
>> tic; find(strcmp('KU', strs)); toc
Die verstrichene Zeit beträgt 0,000014 Sekunden.
SO, strcmp('KU', strs)
dauert eindeutig viel weniger Zeit alsismember(strs,'KU')
Seit 2011a wird empfohlen:
booleanIndex = strcmp('KU', strs)
Wenn Sie den Integer-Index erhalten möchten (den Sie oft nicht benötigen), können Sie Folgendes verwenden:
integerIndex = find(booleanIndex);
strfind
ist veraltet, versuchen Sie es also nicht zu verwenden.
Ich sehe, dass jeder den wichtigsten Fehler in Ihrem Code übersehen hat:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
sollte sein:
strs = {'HA' 'KU' 'NA' 'MA' 'TATA'}
oder
strs = {'HAKUNA' 'MATATA'}
Nun, wenn Sie bei der Verwendung bleiben
ind=find(ismember(strs,'KU'))
Du wirst keine Sorgen haben :).
Andere Antworten sind in diesem Fall wahrscheinlich einfacher, aber der Vollständigkeit halber dachte ich, ich würde die Verwendung von cellfun mit einer anonymen Funktion hinzufügen
indices = find(cellfun(@(x) strcmp(x,'KU'), strs))
Dies hat den Vorteil, dass Sie die Groß- und Kleinschreibung leicht unabhängig machen oder in Fällen verwenden können, in denen Sie über ein Zellarray von Strukturen verfügen:
indices = find(cellfun(@(x) strcmpi(x.stringfield,'KU'), strs))
Kürzester Code:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
[~,ind]=ismember('KU', strs)
Es wird aber nur die erste Position zurückgegeben strs
. Wenn das Element dann nicht gefunden wird ind=0
.
Die Funktionen strcmp und strcmpi sind der direkteste Weg, dies zu tun. Sie durchsuchen Arrays.
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ix = find(strcmp(strs, 'KU'))
Hast du versucht
indices = Find(strs, 'KU')
siehe Link
Alternative,
indices = strfind(strs, 'KU');
sollte auch funktionieren, wenn ich mich nicht irre.