Respuestas:
Supongo que el siguiente código podría hacer el truco:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ind=find(ismember(strs,'KU'))
Esto vuelve
ans =
2
>> strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
>> tic; ind=find(ismember(strs,'KU')); toc
El tiempo transcurrido es 0.001976 segundos.
>> tic; find(strcmp('KU', strs)); toc
El tiempo transcurrido es de 0,000014 segundos.
Entonces, claramente strcmp('KU', strs)
toma mucho menos tiempo queismember(strs,'KU')
Desde 2011a, la forma recomendada es:
booleanIndex = strcmp('KU', strs)
Si desea obtener el índice de enteros (que a menudo no necesita), puede usar:
integerIndex = find(booleanIndex);
strfind
está en desuso, así que trate de no usarlo.
Veo que todos pasaron por alto la falla más importante en su código:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
debiera ser:
strs = {'HA' 'KU' 'NA' 'MA' 'TATA'}
o
strs = {'HAKUNA' 'MATATA'}
Ahora bien, si sigues usando
ind=find(ismember(strs,'KU'))
No tendrás preocupaciones :).
Otras respuestas probablemente sean más simples para este caso, pero para completar, pensé que agregaría el uso de cellfun con una función anónima
indices = find(cellfun(@(x) strcmp(x,'KU'), strs))
lo cual tiene la ventaja de que puede hacer que no distinga entre mayúsculas y minúsculas o usarlo en los casos en que tenga una matriz de estructuras de celdas:
indices = find(cellfun(@(x) strcmpi(x.stringfield,'KU'), strs))
Código más corto:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
[~,ind]=ismember('KU', strs)
Pero solo devuelve la primera posición en strs
. Si no se encuentra el elemento, entonces ind=0
.
Las funciones strcmp y strcmpi son la forma más directa de hacer esto. Buscan a través de matrices.
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ix = find(strcmp(strs, 'KU'))
has probado
indices = Find(strs, 'KU')
ver enlace
alternativamente,
indices = strfind(strs, 'KU');
también debería funcionar si no me equivoco.