next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: La Lectura en un Sup: Arrays y Listas Ant: split Err: Si hallas una errata ...


sort

El operador sort toma una lista de valores y los ordena según el alfabeto ASCII. Por ejemplo:

@rocks = qw/ bedrocks slate rubble granite /;
@sorted = sort (@rocks); # bedrocks granite rubble slate
El operador sort de Perl utiliza los operadores de cadenas por defecto.

:~/perl/src> perl -de 0

Loading DB routines from perl5db.pl version 1.19
Editor support available.

Enter h or `h h' for help, or `man perldebug' for more help.

main::(-e:1):   0
  DB<1> print "a" == "b"
1
  DB<2> @x = sort (10, 2);
  DB<3> p "@x"
10 2

Se le puede pasar como primer argumento un bloque que determina la función de comparación. dicho bloque depende de dos variables ``muertas'' a y b. El valor retornado por el bloque (que deberá ser -1, 0 ó 1) es utilizado como elemento de comparación. Por ejemplo:

> cat sortbynumber.pl
#!/usr/bin/perl -w

@a = (4, 7, 9, 12, -1);
@a = sort { $a <=> $b, } @a;

print "\@a = @a\n";
nereida:~/perl/src> sortbynumber.pl
@a = -1 4 7 9 12

El siguiente ejemplo ordena primero la lista 0..$#name de acuerdo con el array @uid. El nuevo conjunto ordenado de índices es utilizado para producir una reordenación del array name conteniendo los nombres de usuario:

#!/usr/bin/perl -w
my @user =  `cat /etc/passwd`; 
my (@name, @uid);
my $x;

for ($i=0; $i < @user; $i++) {
  ($name[$i], $x, $uid[$i]) = split ':', $user[$i];
}

@name = @name[
  sort {$uid[$a] <=> $uid[$b]} 0..$#name
];

print "@name\n";

El operador sort en un contexto escalar devuelve undef.


next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: La Lectura en un Sup: Arrays y Listas Ant: split Err: Si hallas una errata ...
Casiano Rodríguez León
2006-02-21