[bcn-pm] script_Perl_Array_index_comparison

Jose Luis Perez Diez jluis a escomposlinux.org
dll maig 27 08:34:06 PDT 2019


Bienvenida ,
El dilluns, 27 de maig de 2019, a les 16:44:46 CEST, alessandra.borgognone a unavarra.es va escriure:
> Necesitaría terminar pronto un código y quería pedir un ayuda sobre la
> siguiente cuestión:
> 
> Teniendo 2 arrays:
> @A = ("Red", "Green", "Yellow");
> @B = ("Yellow", "Black","Yellow","Red", "White", "Yellow");
> 
> En array A, cada elemento está representado 1 vez.
> En array B, cada elemento puede ocurrir zero, una o más veces.

Yo usaría un hash y me olvidaría de @A hasta el final con un algoritmo como el siguiente:

my @B = qw(Yellow Black Yellow Red White Yellow);
#qr usa los espacios en blaco para definir una lista de strings 

my %positions ;

for my $pos (0..$#B) {
    if (defined $positions{$B[$pos]}) {
        push @{$positions{$B[$pos]}}, $pos;
    } else {
        $positions{$B[$pos]}=[$pos];
    }
}

my @A = qw (Red Green Yellow);
my $found = 0;

for my $color (@A) {
    if (defined $positions{$color}) {
        $found += scalar  @{$positions{$color}}; # scalar de un array nos devuelve el numero de elementos
        print "$color at index " , join " ,"  ,@{$positions{$color}};
    } else {
        print "$color not found";
    }
    print "\n";
}

print "Elements from B were detected $found times in A\n"


Més informació sobre la llista de correu Barcelona-pm