[bcn-pm] Ordenando arreglos y hashes
Alex Muntada
alexm at cpan.org
Sat Jan 3 13:48:53 CST 2004
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
* Luis Medrano Zaldivar: [2003-12-31/19:04:36 +0000]
> Tengo una pregunta si tengo estos arreglos como los podria
> ordenar [...] de menor a mayor y de mayor a menor [...]
> alfabeticamente [...] y en el caso de hashes quisiera ordenarlo
> por el valor numerico de las llaves:
Hola Luis,
et reenvio els comentaris d'alguns companys de la llista ja que
he vist que tu no hi estàs subscrit i les respostes només anaven
dirigides a la llista.
* Xavier Noria: [2004-01-01/17:22:26 +0100]
> Echale un vistazo a sort (perldoc -f sort), y mira la
> documetacion de <=> y cmp en perlop (perldoc perlop). Te seran
> muy utiles tambien las entradas sobre ordenacion del FAQ
> (perldoc -q sort).
* Timothy Chen Allen: [2004-01-01/11:43:29 -0500]
> Aqui tienes un programa que ilustra algunas formas de jugar con
> ordenar con tus ejemplos. El unico que me estra~a es que
> quieres ordenar por el valor numerico del hash-- en tu ejemplo,
> los *valores*, no las llaves, son numericos. Como dice Xavi,
> leete el perldoc. Tambien, seria interesante mirar el efecto de
> poner un use strict al principio de este programa-- hay cosas
> que romperian en seguida de que podrias aprender.
>
> # numerico
> @arrelgo=(40,100,1,50);
> print "num\n";
> map {print "$_\n"} (sort {$a <=> $b} @arrelgo);
>
> # ordenar de manera alfabeticamente:
> @arreglo=(luis,alberto,karla);
> print "\nalfa\n";
> map {print "$_\n"} (sort {$a cmp $b} @arreglo);
>
> # y en el caso de hashes quisiera ordenarlo por
> # el valor numerico de las llaves:
> print "\nhash\n";
> $ejemplo{luis}=100;
> $ejemplo{alberto}=200;
> $ejemplo{karla}=150;
> map {print $ejemplo{$_}."\n"} (sort {$ejemplo{$a} cmp
> $ejemplo{$b}} (keys %ejemplo));
Només voldria fer un comentari sobre la solució que proposa en
Tim al Luis: no s'hauria d'utilitzar mai una funcio costosa com
el print dins un map perquè fa força lleig i resulta ineficient.
L'alternativa és molt més simple del que podria semblar perquè
només cal treure'l fora del map, així:
print map { $ejemplo{$_}."\n" }
sort { $ejemplo{$a} cmp $ejemplo{$b} }
keys %ejemplo;
Salutacions i bon any a tots!
- --
Alex Muntada <alexm at cpan.org>
http://alexm.org/
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (GNU/Linux)
iD8DBQE/9xyULdxCGS3zaBERAmLrAKCrW2AwkZWN50bxwd7ifoywYTgfwACgs4kL
fkkMQwy9ydxXlW7EPoPCeow=
=EXPc
-----END PGP SIGNATURE-----
More information about the Barcelona-pm
mailing list