• Publicidad

Buscar variable dentro de un arreglo

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

Buscar variable dentro de un arreglo

Notapor sufisavey80 » 2013-05-13 15:31 @688

Buenas tardes...

Está excelente este foro y la verdad sigo aprendiendo... Tengo la siguiente duda, a ver si me podrían ayudar, por favor.

Lo que necesito es leer un arreglo, por ejemplo @nodos, que contiene los valores 15, 20, 45, 78, 450, etc... y barrer una variable a través, de este arreglo, donde la variable trae un valor, por ejemplo $variable = 45, entonces imprimir si existe..

Muchas gracias por su apoyo.
sufisavey80
Perlero nuevo
Perlero nuevo
 
Mensajes: 29
Registrado: 2012-11-07 18:17 @803

Publicidad

Re: Buscar variable dentro de un arreglo

Notapor MARKO » 2013-05-13 15:52 @703

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @nodos = (10,15,20,25,30,35,40,45,50,55,60);
  2. my $variable = 45;
  3. my $contador = 0;
  4. foreach (@nodos){
  5.         if ($_ == $variable){
  6.                 print "sí existe, está en la posición $contador\n";
  7.         }
  8.         $contador ++;
  9. }
  10.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Éxitos.
MARKO
Perlero nuevo
Perlero nuevo
 
Mensajes: 86
Registrado: 2012-01-10 22:34 @982

Re: Buscar variable dentro de un arreglo

Notapor sufisavey80 » 2013-05-13 16:19 @721

Mil gracias, Marko... con tu ejemplo ya se resolvió mi duda... Excelente.

Bonita tarde.
Saludos.
sufisavey80
Perlero nuevo
Perlero nuevo
 
Mensajes: 29
Registrado: 2012-11-07 18:17 @803

Re: Buscar variable dentro de un arreglo

Notapor explorer » 2013-05-13 17:06 @754

Otra versión, usando los índices a los elementos:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @nodos    = (10,15,20,25,30,35,40,45,50,55,60);
  2. my $variable = 45;
  3.  
  4. for my $i (0 .. $#nodos) {
  5.     if ($nodos[$i] == $variable) {
  6.         print "sí existe, está en la posición $contador\n";
  7.     }
  8. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Hay que recordar también el uso de grep(), para hacer este tipo de filtros:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @nodos    = (10,15,20,25,30,35,40,45,50,55,60);
  2. my $variable = 45;
  3.  
  4. my @posiciones = grep { $nodos[$_] == $variable }  0 .. $#nodos;
  5.  
  6. for my $i (@posiciones) {
  7.     print "Está en la posición $i\n";
  8. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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: Buscar variable dentro de un arreglo

Notapor sufisavey80 » 2013-05-14 16:06 @712

Gracias a ambos...

Me surgió otra duda. Por ejemplo, le agregué un else{} a esta rutina para que imprima "no existe". ¿Cómo puedo evitar que cuando se cumpla el else{} no me imprima las veces que no encontró el valor de la variable...?

no existe
no existe
no existe
no existe
no existe


El objetivo es para que cuando yo ponga alguna otra rutina o programa en la condición del if() y se cumpla el else{} no me ejecute varias veces la rutina o programa dentro de la condición else... si no que sólo se ejecute una sola vez.

my @nodos = (10,15,20,25,30,35,40,45,50,55,60);
my $variable = 45;

for my $i (0 .. $#nodos) {
if ($nodos[$i] == $variable) {
print "sí existe, está en la posición $contador\n";
}
else{
print "no existe";
}


Muchas gracias de antemano,
Saludos.
sufisavey80
Perlero nuevo
Perlero nuevo
 
Mensajes: 29
Registrado: 2012-11-07 18:17 @803

Re: Buscar variable dentro de un arreglo

Notapor explorer » 2013-05-14 16:33 @731

Esta es mi solución. Consiste en sacar los coincidentes, y luego ver si hemos encontrado o no algún coincidente.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @nodos    = (10,15,20,25,30,35,40,45,50,55,60);
  2. my $variable = 45;
  3.  
  4. my @posiciones = grep { $nodos[$_] == $variable }  0 .. $#nodos;
  5.  
  6. if (@posiciones) {
  7.     print "Sí existe: [@posiciones]\n";
  8. }
  9. else {
  10.     print "No existe\n";
  11. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

En tu caso, se podría hacer guardando lo encontrado en alguna variable, y luego, después del bucle, preguntar si la variable tiene o no algún valor, parecido a como lo hago yo.
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: Buscar variable dentro de un arreglo

Notapor sufisavey80 » 2013-05-14 16:43 @738

Muchas gracias, explorer/Marko... excelente como siempre.

Saludos.
sufisavey80
Perlero nuevo
Perlero nuevo
 
Mensajes: 29
Registrado: 2012-11-07 18:17 @803


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 51 invitados