Página 1 de 1

Cómo eliminar un elemento de un array

NotaPublicado: 2014-01-13 16:07 @713
por Ayllonbe
Buenas a todos, tengo una gran duda: debo aplicarla a algo complejo, pero usaré ejemplos estúpidos para que me puedan entender correctamente y así sea más fácil el poder solucionar este problema que tengo:

@array = ('perro','gato','lobo');

¿Hay alguna forma en la cuál yo pueda eliminar 'gato' de ese array? Y cuando haga un print:

print join(",", @array);

Me dé

perro,lobo

Un saludo.

Re: Cómo eliminar un elemento de un array

NotaPublicado: 2014-01-13 16:53 @745
por explorer
Bienvenido a los foros de Perl en Español, Ayllonbe.

Puedes usar grep():

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. > perl -E '@array = qw(perro gato lobo); @array = grep { $_ ne "gato" } @array; say "[@array]"'
  2. [perro lobo]
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

La condición en grep{} se leería: "El animal no es 'gato'". Lo que hace grep{} es un filtrado.

Otra opción es usar splice(), si sabemos la posición del elemento a eliminar:

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. > perl -E '@array = qw(perro gato lobo); splice @array, 1, 1; say "[@array]"; say scalar @array'
  2. [perro lobo]
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Lo que hace splice() es extraer elementos (también hace sustituciones y ampliaciones).

Más información en perldoc -f grep y perldoc -f splice.

Re: Cómo eliminar un elemento de un array

NotaPublicado: 2014-01-14 12:55 @580
por Ayllonbe
Muchas gracias, explorer. Pensé que con esto acabaría, pero tendré que exponer el problema que tengo:

Tengo un @array = ('AAT-TAA', 'AAT-TAA', 'AAT-TAA'). En mi caso es más complejo, pues es un alineamiento múltiple que he programado, pero me salen guiones (o gaps) que coinciden con todas las cadenas. Lo que quiero es saber qué debo hacer para para eliminarlos y se me quede el array así:

@array = ('AATTAA','AATTAA','AATTAA')

De nuevo, gracias por solucionarme lo anterior, ya que lo podré usar para otra ocasión.

Re: Cómo eliminar un elemento de un array

NotaPublicado: 2014-01-14 16:58 @748
por explorer
Te vale con hacer una operación de sustitución.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. @array = qw(
  2.     AAT-TAA    AAT-TAA    AAT-TAA
  3. );
  4. for (@array) {
  5.     s/-//g;
  6. }
  7. say "@array";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

La operación es altamente mágica: el bucle for() recorre los valores de @array, guardando cada elemento en la variable $_, pero en realidad, es un "alias" del elemento original, por lo que cualquier modificación de $_ repercutirá en el elemento del array (o sea, que realmente estamos editando el array).

La operación que le hacemos a $_ es de sustitución: cambiamos todos (/g) los '-' por nada (o sea, los quitamos).