Requisito previo: Perl | Hachís
El conjunto de pares clave/valor se llama Hash. Cada clave en una estructura hash es única y de tipo strings. Los valores asociados con estas claves son escalares. Estos valores pueden ser un número, una string o una referencia. Un Hash se declara usando mi palabra clave. Consideremos un ejemplo para comprender el concepto de clasificación del hash.
Ejemplo: Considere un hash con los nombres de los estudiantes en una clase y con su puntaje promedio. Aquí, el nombre de los estudiantes son las claves y sus puntajes promedio son los valores. Imprima este hash usando el bucle foreach en los nombres de los estudiantes devueltos por la keys
función.
# Perl program to demonstrate # the concept of hash use strict; use warnings; use 5.010; # Creating a hash of studentnames # and their average score my %studentnames = ( Martha => 14, Vivek => 27, Earl => 31, Marty => 16.5, Jason => 25.2, Socrates => 29.5, Uri => 19.6, Nitin => 30, Plato => 39, ); # displaying the keys and values of Hash # using the foreach loop and keys function # output may be different each # time when you run the code foreach my $name (keys %studentnames) { # printing the keys and values of hash printf "%-8s %s\n", $name, $studentnames{$name}; }
Producción:
Marty 16.5 Jason 25.2 Plato 39 Vivek 27 Socrates 29.5 Martha 14 Earl 31 Uri 19.6 Nitin 30
Nota: La salida puede contener cualquier orden aleatorio según el sistema y la versión de Perl.
Los hashes se pueden ordenar de muchas maneras de la siguiente manera:
- Clasificación del hash según los valores ASCII de sus claves: generalmente, la clasificación se basa en la tabla ASCII. Significa que la clasificación mantendrá todas las letras mayúsculas delante de todas las letras minúsculas. Este es el comportamiento predeterminado de la clasificación. El código de ejemplo anterior está ordenado según los valores ASCII de sus claves.
- Ordenar el Hash según el orden alfabético de sus claves: Aquí, las claves se ordenan alfabéticamente.
Ejemplo:
# Perl program to demonstrate
# sorting of the hash according
# alphabetical order of its keys
use
strict;
use
warnings;
use
5.010;
# Creating a hash of studentnames
# and their average score
my
%studentnames
= (
Martha
=> 14,
Vivek
=> 27,
Earl
=> 31,
Marty
=> 16.5,
Jason
=> 25.2,
Socrates
=> 29.5,
Uri
=> 19.6,
Nitin
=> 30,
Plato
=> 39,
);
# sorting the hash according
# alphabetical order of its keys
foreach
my
$name
(
sort
{
lc
$a
cmp
lc
$b
}
keys
%studentnames
)
{
printf
"%-8s %s\n"
,
$name
,
$studentnames
{
$name
};
}
Producción:
Earl 31 Jason 25.2 Martha 14 Marty 16.5 Nitin 30 Plato 39 Socrates 29.5 Uri 19.6 Vivek 27
- Clasificación según los valores de hash: también puede clasificar el hash según los valores de hash de la siguiente manera:
Ejemplo 1: Ordenar los valores hash según la tabla ASCII.
# Perl program to demonstrate
# sorting of the hash according
# to the values of Hash
use
strict;
use
warnings;
use
5.010;
# Creating a hash of studentnames
# and their average score
my
%studentnames
= (
Martha
=> 14,
Vivek
=> 27,
Earl
=> 31,
Marty
=> 16.5,
Jason
=> 25.2,
Socrates
=> 29.5,
Uri
=> 19.6,
Nitin
=> 30,
Plato
=> 39,
);
# sorting of the hash according
# to ASCII code of values of Hash
foreach
my
$name
(
sort
values
%studentnames
)
{
say
$name
;
}
Producción:
14 16.5 19.6 25.2 27 29.5 30 31 39
Ejemplo 2: Clasificación según el valor numérico de Valores de hash de la siguiente manera:
# Perl program to demonstrate
# sorting of the hash according
# to the values of Hash
use
strict;
use
warnings;
use
5.010;
# Creating a hash of studentnames
# and their average score
my
%studentnames
= (
Martha
=> 14,
Vivek
=> 27,
Earl
=> 31,
Marty
=> 16.5,
Jason
=> 25.2,
Socrates
=> 29.5,
Uri
=> 19.6,
Nitin
=> 30,
Plato
=> 39,
);
# sorting of the hash according
# to the numerical value of
# Values of hash
foreach
my
$name
(
sort
{
$a
<=>
$b
}
values
%studentnames
)
{
say
$name
;
}
Producción:
14 16.5 19.6 25.2 27 29.5 30 31 39
- Ordenar las claves del hash según los valores: También puede ordenar las claves del hash según los valores dados.
Ejemplo 1: En el siguiente programa, <=> se denomina operador de la nave espacial . Si ejecuta el código una y otra vez, puede notar la diferencia en la salida. A veces encuentras a Platón antes que Nitin y viceversa.
# Perl program to demonstrate the
# Sorting of keys of the hash
# according to the values
use
strict;
use
warnings;
use
5.010;
# Creating a hash of studentnames
# and their average score
my
%studentnames
= (
Martha
=> 14,
Vivek
=> 27,
Earl
=> 31,
Marty
=> 16.5,
Jason
=> 25.2,
Socrates
=> 29.5,
Uri
=> 19.6,
Nitin
=> 45,
Plato
=> 45,
);
# Sort the keys of the hash
# according to the values
# Here $a and $b are the
# placeholder variable of sort
foreach
my
$name
(
sort
{
$studentnames
{
$a
} <=>
$studentnames
{
$b
}}
keys
%studentnames
)
{
printf
"%-8s %s\n"
,
$name
,
$studentnames
{
$name
};
}
Producción:
Martha 14 Marty 16.5 Uri 19.6 Jason 25.2 Vivek 27 Socrates 29.5 Earl 31 Plato 45 Nitin 45
Ejemplo 2: para resolver el código anterior, las claves que tienen los mismos valores se pueden ordenar de acuerdo con la tabla ASCII de la siguiente manera:
# Perl program to demonstrate the
# Sorting of keys of the hash
# according to the values
use
strict;
use
warnings;
use
5.010;
# Creating a hash of studentnames
# and their average score
my
%studentnames
= (
Martha
=> 14,
Vivek
=> 27,
Earl
=> 31,
Marty
=> 16.5,
Jason
=> 25.2,
Socrates
=> 29.5,
Uri
=> 19.6,
Nitin
=> 45,
Plato
=> 45,
);
# keys that have the same value
# will be sorted according the
# ASCII table
foreach
my
$name
(
sort
{
$studentnames
{
$a
} <=>
$studentnames
{
$b
} or
$a
cmp
$b
}
keys
%studentnames
) {
printf
"%-8s %s\n"
,
$name
,
$studentnames
{
$name
};
}
Producción:
Martha 14 Marty 16.5 Uri 19.6 Jason 25.2 Vivek 27 Socrates 29.5 Earl 31 Nitin 45 Plato 45
Explicación: Aquí puede ver que las claves Nitin y Plato están ordenadas según la tabla ASCII. No importa cuántas veces ejecute el código, el resultado seguirá siendo el mismo.
Publicación traducida automáticamente
Artículo escrito por Bhashkar_P y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA