perl | Operaciones hash

    Requisito previo : Hash de Perl , Hash de Perl

Como la mayoría de los lectores probablemente saben, el hash almacena datos mediante un mecanismo llamado Hashing . En hashing, se utiliza una clave para determinar un valor o datos. Estas claves deben ser únicas y luego se utilizan como el índice en el que se almacenan los datos asociados con la clave. Estos datos no tienen que ser únicos. Puede estar duplicado.

Hash es una estructura de datos que almacena datos manteniendo relaciones entre claves y valores o pares clave/valor . Dada una clave, podemos encontrar su valor. Los pares clave/valor son objetos mutables y, por lo tanto, se pueden cambiar cuando lo desee. La clave en un hash se puede definir como un objeto que se utiliza para recuperar un valor. La principal ventaja de usar un hash sobre arrays es que el hash permite que el tiempo de ejecución de operaciones básicas como obtener un valor o establecer un valor en una clave particular (índice en el caso de arrays), permanezca constante incluso para grandes conjuntos de datos. .

Tenga en cuenta que los hashes en Perl no están ordenados . Esto significa que cuando itera sobre un hash, es posible que no extraiga los valores en el mismo orden en que se insertaron.

Los valores almacenados en un hash pueden ser de tipo entero, flotante, string, booleano, arrays y el propio hash.

Ejemplo

#!/usr/bin/perl
  
# Creating a simple hash containing
# different types of values
my %hash = ( # value type string
            'MyVehicle' => 'Car',
              
            # value type integer
            'Model' => 1234,
              
            # value type float
            'Speed' => 60.7,    
              
            # value type hash
            'Traffic' => {'Red' => 'Stop',         
                        'Yellow' => 'Look and move', 
                        'Green' => 'Go'},
            # value type array
            'AllVehicles' => ['Car', 'Cycle', 
                              'Bus', 'Auto']);
  
# printing values stored 
# at key 'Traffic' and 'AllVehicles'
print "Traffic : $hash{'Traffic'}\n";
print "AllVehicles : $hash{'AllVehicles'}\n";
Producción:

Traffic : HASH(0x242af30)
AllVehicles : ARRAY(0x24471f8)

    Aquí, el tipo de datos en la clave Traffic es hash y en la clave AllVehicles es de tipo array. Entonces, la salida es la dirección del primer elemento del hash y la array respectivamente.

    Además, se pueden realizar muchas operaciones o manipulaciones en un hash que se explican a continuación:

    Operaciones en hash

    Las operaciones de hash de Perl incluyen varias operaciones que actúan sobre el hash para almacenar y recuperar datos de manera más eficiente. Las operaciones más utilizadas en el hash son:

    1. Acceder a las claves y valores en un hash.
    2. Modificar los valores de claves particulares.
    3. Pasa al hash.

    Cada operación en Perl Hash se explica a continuación con ejemplos:

    Buscar/Acceder a valores hash o claves de Perl

    Buscar o acceder significa poder acceder a todos y cada uno de los pares clave/valor de un hash para su posterior manipulación. Las claves en Perl almacenan elementos de un Hash de una manera tan óptima que sus valores se pueden recuperar muy rápido. Los valores en un hash se pueden buscar utilizando el nombre de clave respectivo incrustado entre corchetes {} .

    Sintaxis: $hash_name{key_name};

    Ejemplo

    # Perl program to demonstrate 
    # accessing of the hash values
    my %hash = ('MyVehicle' => 'Car'
                'Model' => 1234, 
                'Speed' => 60.7, 
                  
                # value type hash
                'Traffic' => {'Red' => 'Stop',             
                              'Yellow' => 'Look and move'
                              'Green' => 'Go'},
                                
                # value type array
                'AllVehicles' => ['Car', 'Cycle'
                                  'Bus', 'Auto']);
      
    # Creating array containing 
    # keys of the hash
    @k = keys %hash;         
      
    # print all keys of the hash
    print "Keys are : ";
    print join(", ", @k), "\n";
      
    # Creating array containing
    # values of the hash
    @v = values %hash;             
      
    # print value of all values
    print "Values are : ";
    print join(", ", @v), "\n";
      
    # accessing individual values of the keys
    print "Speed is : $hash{'Speed'}\n";
    print "Yellow light indicates : $hash{'Traffic'}{'Yellow'}\n";
    print "$hash{'AllVehicles'}[3] is a type of vehicle \n";
    Producción:

    Keys are : AllVehicles, MyVehicle, Speed, Traffic, Model
    Values are : ARRAY(0x9361f8), Car, 60.7, HASH(0x919f30), 1234
    Speed is : 60.7
    Yellow light indicates : Look and move
    Auto is a type of vehicle 
    

      Modificar elementos hash

      Los valores en un hash no son fijos, es decir, son propensos a cambiar y Perl brinda esta capacidad de modificar y actualizar los valores en un hash. Para una clave determinada, para modificar o actualizar su valor correspondiente, use la siguiente sintaxis:

      Sintaxis: $hash{‘Clave’} = valor_modificado;

      Para modificar una clave determinada sin cambiar su valor correspondiente, simplemente cree una clave adicional que sea la clave modificada y asigne un valor (para el que desea esta nueva clave) a esta clave y luego elimine el par clave/valor anterior usando la palabra clave delete .

      Ejemplo :

      # Perl program to demonstrate the 
      # Modification of an element of a Hash 
        
      # creating a hash
      my %hash = ('MyVehicle' => 'Car'
                  'Model' => 1234, 
                  'Speed' => 60.7, 
                    
                  # value type hash
                  'Traffic' => {'Red' => 'Stop',             
                                'Yellow' => 'Look and move'
                                'Green' => 'Go'},
                    
                  # value type array
                  'AllVehicles' => ['Car', 'Cycle'
                                    'Bus', 'Auto']);
        
      # previous value of key 'Model'
      print ("Previous Model number is "
                   $hash{'Model'}, "\n");
        
      # modifying value of key 'Model'
      $hash{'Model'} = 7717;
        
      # new value of key 'Model'
      print ("New Model number is "
              $hash{'Model'}, "\n");
        
      # Changing key from 'MyVehicle' to 'Mine' 
      # without changing its corresponding value
      @k = keys %hash;
        
      # printing previous keys
      print "Previous Keys are : \n";     
      print join(", ", @k), "\n"
        
      $hash{'Mine'} = 'Car';
        
      # deleting 'MyVehicle' key/value pair
      delete $hash{'MyVehicle'};         
        
      @k_n = keys %hash;
      print "New Keys are : \n";    
        
      # printing new keys
      print join(", ", @k_n), "\n"
      Producción:

      Previous Model number is 1234
      New Model number is 7717
      Previous Keys are : 
      MyVehicle, AllVehicles, Model, Traffic, Speed
      New Keys are : 
      Mine, Speed, Traffic, Model, AllVehicles
      

    Bucle sobre los valores hash de Perl

    Perl permite hacer un bucle sobre sus valores Hash. Significa que el hash es de tipo iterativo y uno puede iterar sobre sus claves y valores usando el bucle ‘for’ y el bucle ‘while’. En Perl, la estructura de datos hash la proporciona la función keys() similar a la presente en el lenguaje de programación Python. Esta función de claves() le permite obtener una lista de claves del hash en escalares que se pueden usar para iterar sobre los valores de las respectivas claves del hash.

    Claves de sintaxis %Hash

    Además, Perl ofrece dos formas de recorrer todos los elementos de un hash.

    1. bucle foreach perl
    2. Perl while loop con cada función

    # Perl program to demonstrate the 
    # looping over a hash using its keys
      
    # creating a hash
    my %hash = ('MyVehicle' => 'Car'
                'Model' => 1234, 
                'Speed' => 60.7, 
                  
                # value type hash
                'Traffic' => {'Red' => 'Stop',             
                              'Yellow' => 'Look and move'
                              'Green' => 'Go'},
                  
                # value type array
                'AllVehicles' => ['Car', 'Cycle',
                                  'Bus', 'Auto']);
      
    # Case 1: When hash is not large 
      
    # for loop to loop over the hash
    foreach my $key (keys %hash)
    {
          
        # do stuff
        $value = $hash{$key};
        print "Value of $key is $value\n"
    }
      
    # Case 2: When hash is very large 
      
    # traversing the hash using "each" function
    while(($key, $value) = each (%hash))
    {
          
        # do stuff
        $value = $hash{$key};
        print "Value of $key is $value\n"
    }
    Producción:

    Value of Model is 1234
    Value of MyVehicle is Car
    Value of Traffic is HASH(0x1049f30)
    Value of AllVehicles is ARRAY(0x10661f8)
    Value of Speed is 60.7
    Value of Model is 1234
    Value of MyVehicle is Car
    Value of Traffic is HASH(0x1049f30)
    Value of AllVehicles is ARRAY(0x10661f8)
    Value of Speed is 60.7
    

    En el ejemplo anterior, el código proporciona la dirección del primer elemento de la array y el hash almacenado en la clave ‘Todos los vehículos’ y ‘Tráfico’ respectivamente. Para superar esto, tenemos que hacer un bucle dentro de la array y hacer hash también.

    Ejemplo

    # Perl program to demonstrate the 
    # looping over a multidimensional hash
      
    # creating a hash
    my %hash = ('MyVehicle' => 'Car'
                'Model' => 1234, 
                'Speed' => 60.7, 
                  
                # value type hash
                'Traffic' => {'Red' => 'Stop',             
                              'Yellow' => 'Look and move'
                              'Green' => 'Go'},
                                
                # value type array
                'AllVehicles' => ['Car', 'Cycle',
                                  'Bus', 'Auto']);
      
    # Loop over the key storing array 
    my @array = @{$hash{'AllVehicles'}};
    print "AllVehicles include \n";
      
    # for loop to loop over the array
    foreach my $ele (@array)
    {
        print "$ele\n";
    }
      
    # Loop over the key storing hash
    print "\nTraffic includes\n";
      
    # for loop to loop over the hash
    foreach my $val(keys %{$hash{'Traffic'}})
    {
        print "Key : $val, value : $hash{'Traffic'}{$val}\n";
    }
    Producción:

    AllVehicles include 
    Car
    Cycle
    Bus
    Auto
    
    Traffic includes
    Key : Yellow, value : Look and move
    Key : Green, value : Go
    Key : Red, value : Stop
    

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 *