crear concatenate como cell2str array string matlab cell-array

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