como - concatenate string matlab
¿Cómo buscar una cadena en matriz de celdas en MATLAB? (8)
Digamos que tengo la matriz de células
strs = {''HA'' ''KU'' ''LA'' ''MA'' ''TATA''}
¿Qué debo hacer si quiero encontrar el índice de ''KU''
?
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
.
Desde 2011a, la forma recomendada es:
booleanIndex = strcmp(''KU'', strs)
Si desea obtener el índice entero (que a menudo no necesita), puede usar:
integerIndex = find(booleanIndex);
strfind
está en desuso, así que trata de no usarlo.
Las funciones strcmp y strcmpi son la forma más directa de hacerlo. Buscan en arreglos.
strs = {''HA'' ''KU'' ''LA'' ''MA'' ''TATA''}
ix = find(strcmp(strs, ''KU''))
Otras respuestas son probablemente 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))
que tiene la ventaja de que puede hacer que sea insensible a mayúsculas y minúsculas o utilizarlo en los casos en que tenga una matriz de celdas de estructuras:
indices = find(cellfun(@(x) strcmpi(x.stringfield,''KU''), strs))
Supongo que el siguiente código podría hacer el truco:
strs = {''HA'' ''KU'' ''LA'' ''MA'' ''TATA''}
ind=find(ismember(strs,''KU''))
Esto regresa
ans =
2
Veo que todos olvidaron el defecto 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 si te limitas a usar
ind=find(ismember(strs,''KU''))
No tendrás preocupaciones :).
has probado
indices = Find(strs, ''KU'')
ver link
alternativamente,
indices = strfind(strs, ''KU'');
también debería funcionar si no me equivoco.
>> 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 0.000014 segundos.
ASÍ, claramente strcmp(''KU'', strs)
toma mucho menos tiempo que ismember(strs,''KU'')