perl | Hash en contexto escalar y de lista

    Prerrequisito: Perl Hash

Hash en Perl es un conjunto de pares clave/valor. Perl nos brinda la flexibilidad de asignar el hash a un tipo Lista y un tipo Escalar , conocidos como Contexto LISTA y Contexto ESCALAR respectivamente.

    Hash en contexto de LISTA

    La asignación de un hash a un tipo de lista en Perl se logra haciendo una lista con las claves y los valores como elementos. Cuando un hash está en el contexto LIST, Perl convierte un hash en una lista de valores alternos. Cada par clave-valor en el hash original se convertirá en dos valores en la lista recién creada.

    Sintaxis:
    mi @lista = %hash;

    Un hecho interesante sobre esta lista resultante es que para cada par, la clave vendrá primero y el valor vendrá después .

    Ejemplos

    # !/usr/bin/perl
    # Perl program to demonstrate
    # List Context of hash
      
    use strict; 
    use warnings;
    use 5.010;
    use Data::Dumper qw(Dumper);
      
    # Creating a Hash
    my %hash = ('MyVehicle' => 'Car'
            'Model' => 1234, 
            'Speed' => 60.7,     
            'Red' => 'Stop',         
            'Yellow' => 'Look and move'
            'Green' => 'Go'
           ); 
      
    # Assign hash to a list context
    my @list = %hash;
      
    # Print the List
    say Dumper \@list;
    Producción:

    $VAR1 = [
              'Yellow',
              'Look and move',
              'Green',
              'Go',
              'Speed',
              '60.7',
              'MyVehicle',
              'Car',
              'Red',
              'Stop',
              'Model',
              1234
            ];
    

    Aquí podemos ver que cada valor del hash se coloca en la lista después de su clave correspondiente. Pero no está definido el orden en que se colocarán estos pares en la lista.

    Data::Dumper se utiliza para serializar el hash y la lista. Este módulo proporciona métodos para resolver una estructura de datos (incluidos los objetos) en un formato de string que se puede usar tanto para «volcar» los datos para imprimir como para realizar una evaluación de modo que una estructura volcada se pueda reconstituir con eval en una estructura interna válida . .

    La función principal Dumper acepta una lista de referencias escalares a estructuras de datos u objetos. El valor devuelto es una representación de string de la estructura, producida en formato de sintaxis de string normal.

    Ejemplo

    # !/usr/bin/perl
    # Perl program to demonstrate
    # Use of Data::Dumper
      
    use Data::Dumper;
      
    my $ref = { 'MyVehicle' => 'Car'
            'Model' => 1234, 
            'Speed' => 60.7,     
            'Red' => 'Stop',         
            'Yellow' => 'Look and move'
            'Green' => 'Go'
          }; 
      
    print Dumper($ref);
    Producción:

    $VAR1 = {
              'Yellow' => 'Look and move',
              'Red' => 'Stop',
              'MyVehicle' => 'Car',
              'Green' => 'Go',
              'Speed' => '60.7',
              'Model' => 1234
            };
    

    Usos de LIST Context en hash:

  1. En el contexto de Lista en Perl, el operador se puede usar para obtener múltiples valores entre el rango proporcionado.
    Ejemplo:
    @hundred = (0..100);
    

    El ejemplo anterior, si se coloca en una declaración de impresión, dará como resultado la impresión de un rango de números de 0 a 100.

  2. La clasificación de un hash por sus claves o valores se puede lograr fácilmente usando List Context. Después de convertir el hash en una lista de sus claves o valores, ordene esa lista y luego almacene las claves o valores correspondientes en el orden ordenado.
  3. También podemos usar el contexto de lista de hash donde queremos ejecutar un fragmento de código solo cuando el hash no está vacío, es decir, el tamaño del hash no es 0.
    Sintaxis

    @keys = claves %hash;
    si (@teclas)
    {
    ….Código….
    }

    Hash en contexto ESCALAR

    La asignación de un hash a un tipo escalar en Perl en realidad dará un número interno que representa el diseño interno del hash. El tipo de retorno es una string que describe las estadísticas de almacenamiento actuales para el hash. Esto se
    informa como cubos «usados/totales» . Los cubos son los contenedores de almacenamiento para su información de hash.

    La string obtenida parece una fracción que se puede evaluar como:

    The denominator of the fraction is the total number of buckets.
    The numerator of the fraction is the number of buckets which has one or more elements.

    Sintaxis:
    mi $lista = %hash;

    Ejemplos

    # !/usr/bin/perl
    # Perl program to demonstrate
    # Scalar Context of hash
      
    # Creating a Hash
    my %hash = (
            'MyVehicle' => 'Car'
            'Model' => 1234, 
            'Speed' => 60.7,     
            'Red' => 'Stop',         
            'Yellow' => 'Look and move'
            'Green' => 'Go'
            ); 
      
    # Assign hash to a Scalar Context
    my $list = %hash;
      
    # Print the List
    print $list;
    Producción:

    5/8
    

    En el resultado anterior, hay un total de 6 cubos (todos los pares de clave/valor) en el hash y, por lo tanto, el total de
    cubos asignados será la potencia más baja de 2> claves totales , para el alojamiento completo de todos los cubos, por lo tanto, el denominador es 8 Mientras
    que el numerador depende totalmente del algoritmo interno, ya que sigue cambiando su valor dependiendo de las propiedades de almacenamiento de hash.
    Sin embargo, una vez que el hash haya asignado sus cubos, permanecerán asignados incluso si reducimos el hash.

    NOTA: Para hashes con el mismo número de elementos, cuanto mayor sea el número, mejor. El que devuelve 6/8 tiene menos colisiones que el que devuelve 4/8.

    Usos del Contexto ESCALAR en hash:

  1. El contexto escalar de un hash ayuda a determinar si el hash está vacío o no. Devuelve 0 si el hash
    está vacío.

    mi $lista = %hash;
    if ($lista)
    {
    ….Código….
    }

    La condición if se ejecutará si el hash no está vacío.

  2. Ayuda a descubrir si el algoritmo hash interno de Perl está funcionando mal en nuestro conjunto de datos.

    Por ejemplo ,
    colocamos 10 cosas en un hash, pero evaluar %HASH en un contexto escalar revela «1/16», lo que significa que solo se ha tocado uno de los dieciséis cubos y presumiblemente contiene los 10 elementos. Esto no se supone que suceda.

  3. También podemos obtener el tamaño, es decir, la cantidad de elementos de un hash usando el contexto escalar en
    claves o valores.

    Sintaxis

    @keys = claves %hash;
    $tamaño = @teclas;

    Aquí, $size devolverá el tamaño del hash.

Publicación traducida automáticamente

Artículo escrito por BhavikBothra y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *