• Publicidad

Cómo eliminar un elemento de un array

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Cómo eliminar un elemento de un array

Notapor Ayllonbe » 2014-01-13 16:07 @713

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.
Ayllonbe
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2014-01-13 15:56 @705

Publicidad

Re: Cómo eliminar un elemento de un array

Notapor explorer » 2014-01-13 16:53 @745

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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Cómo eliminar un elemento de un array

Notapor Ayllonbe » 2014-01-14 12:55 @580

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.
Ayllonbe
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2014-01-13 15:56 @705

Re: Cómo eliminar un elemento de un array

Notapor explorer » 2014-01-14 16:58 @748

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).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 16 invitados