Codificación de las conexiones en Perl (2 / 6 paso)

Paso 2: Modelo Simple

Perl tiene básicamente 3 tipos de datos primitivos. Picaduras, conjuntos indexados y matrices asociativas.
Muy temprano, descubrieron era más fácil para mí trabajar con punteros a estas estructuras, y la referencia cuando sea necesario. Matrices asociativas se prestan bien a pares clave valor. Sin embargo, esto no es el final de esta consideración, como una clave puede asignar a más de un valor. Dependiendo de la aplicación, definir estrictamente el valor de la asociación puede clobber un valor previo. Así que vamos a ver cómo nos podríamos modelo varios valores que se asignan a una tecla.

Tenga en cuenta los siguientes enfoques:

Código:

 #!/usr/bin/perl <br>use strict; # Just do it! use warnings; use Data::Dumper; <br> my $key1 = 'city1'; my $key2 = 'city2'; my $key3 = 'city3'; my $val1 = 'zip1'; my $val2 = 'zip2'; my $val3 = 'zip3'; my $val4 = 'zip1'; my = ($val1,$val3,$val4); # Make a quick list Notice the repeated value my $hashref; # Initialize the structure 
 #approach 1 hash of string-tokens foreach my $value ( { if ($hashref->{$key1}) { my $current_value = $hashref->{$key1}; $hashref->{$key1} = $current_value . "," . $value; }else{ $hashref->{$key1} = $value; } } # print Dumper $hashref; 
 #approach 2 key-assoc-cnt hash foreach my $value ( { if ($hashref->{$key2}->{$value}) { $hashref->{$key2}->{$value} ++; }else{ $hashref->{$key2}->{$value} = 1; } } # print Dumper $hashref; 
 #approach 3 hash - array associations foreach my $value ( { if ($hashref->{$key3}) { push( , $value); #switch order push vs unshift }else{ $hashref->{$key3} = [ $value ]; } } print Dumper $hashref; 

Salida:

 #perl association_approaches.pl<br>$VAR1 = { 'city2' => { 'zip3' => 1, 'zip1' => 2 }, 'city1' => 'zip1,zip3,zip1', 'city3' => [ 'zip1', 'zip3', 'zip1' ] }; 

En cada uno de estos enfoques, el comportamiento es determinado por la existencia / definición de la clave. Además, los métodos de aprovechan el concepto de "autovivification" de Perls. Cada tecla se podrá acumular una serie de "tokens". En el primer enfoque, el valor de una clave se utiliza directamente como una cadena. Si más de un símbolo (token) se requiere, se agrega a la cadena separada por un carácter arbitrario. En este caso sería una coma, pero más en general, puede seleccionar permitir tokenización con la función split. El segundo enfoque, el valor se mantiene separado haciendo otra capa de asociación. En última instancia, el hash será necesario asignar un valor. Se podría definir en cualquier número de valores. El valor seleccionado se inicializa en 1 e incrementado en inscripciones posteriores. El tercer enfoque se ve en el uso de conjuntos indexados para cada uno de los valores.

El primer acercamiento fue utilizado en una aplicación, donde estaba bajo un poco más de una contracción del tiempo. Muestra su crianza como algo utilizado para manejar archivos csv. Encontré que como tokens se volvieron más complicados se hizo más difícil y más difícil escoger un separador de testigo fiable. Cuando tuve tiempo de volver atrás y evaluar alternativas me encontré con que me ha gustado el segundo enfoque. Donde como el tercer enfoque fue engorroso para mi aplicación, ofreció el segundo enfoque se definió la habilidad de crear una lista única con el beneficio de lado de contar el número de veces el par. En mi aplicación el orden de entrada no era importante, como poder iterar por el conjunto de claves. aplicaciones donde el orden es más importante, utilizando matrices tiene más sentido.

Ahora vamos a ver qué podemos hacer con número aproximación 2.

 # original hash from approach 2 $VAR1 = { 'city2' => {<br> 'zip3' => 1, 'zip1' => 2 } } 
 # Extending from approach 2 above # Reverse it my $revhash = {}; foreach my $key (keys(%$hashref)){ foreach my $val (keys(%{$hashref->{$key}})){ $revhash->{$val}->{$key} = $hashref->{$key}->{$val}; } } print Dumper $revhash; 

Salida:

 #perl revit.pl $VAR1 = { 'zip3' => { 'city2' => 1 }, 'zip1' => { 'city2' => 2 } }; # 

Tenga en cuenta cómo han cambiado las claves y valores, y que la cuenta de enlace sigue siendo el mismo.

Artículos Relacionados

El peligro de las conexiones eléctricas flojas y arreglarlos!

El peligro de las conexiones eléctricas flojas y arreglarlos!

En el mundo de la energía eléctrica es importante hacer bien todas las conexiones. Es tiene que ser apretada (no tan apretada que tira hilos de pernos/tornillos) para evitar contactos de alta resistencia que generará calor.Soldadura de las conexiones
Cómo hacer las conexiones en el muelle 9

Cómo hacer las conexiones en el muelle 9

¿Quieres conocer a gente en el laboratorio de electrónica pero no tienen idea sobre qué hablar? Hacer algunas conexiones! Pregúnteles acerca de un proyecto que fracasó en el campo, lo más probable es que es debido a una conexión suelta.Todos hemos si
Cocodrilo conduce con Integral los sostenedores del fusible para las conexiones seguras a las baterías de plomo

Cocodrilo conduce con Integral los sostenedores del fusible para las conexiones seguras a las baterías de plomo

no me gusta el fuego.  Me disgusta especialmente incendios en mi tienda y mi saco de dormir. Este instructable detalla los pasos utiliza para crear un par de cocodrilo conduce con portafusibles integral para que lo conectes con el caimán lleva está p
Por qué las bayas con perlas

Por qué las bayas con perlas

Este acerca de cómo ellos Berries Smoothie es increíble. Es perfecto para este día y refrescarse en la piscina del kiddie de vecinos. ADVERTENCIA: sus amigos se convertirá en adictos y siempre pedirá que hacen de este, tan en el lado negativo que no
Árbol de Navidad desde teléfono: no codificación requerida interruptor de red utilizando la partícula fotón y IFTTT hacer

Árbol de Navidad desde teléfono: no codificación requerida interruptor de red utilizando la partícula fotón y IFTTT hacer

Un interruptor accionado por una partícula fotón y IFTTT. Funcionar cualquier dispositivo (árbol de Navidad!) en tu casa desde tu teléfono! O desde twitter! o basado en el tiempo en su ubicación! Con ninguna codificación y mínima soldadura habilidad
Corona del laser

Corona del laser

Me encantan algunas de las cosas de vestir nuevo que está apareciendo en Adafruit, Hackaday y hacer la revista. Cuando vi nuevo 60 LED anillo de Neopixel de Adafruit, sabía exactamente lo que quería construir para mis hijas... Había hecho una tentati
Escudo del Motor V2 de codificación Tutorial de semillas

Escudo del Motor V2 de codificación Tutorial de semillas

En este Intructable a hablar sobre un problema común en la programación, el método de arriba hacia abajo de la programación y aprender a controlar el Motor de Seeed protector V2.0 para el Arduino Uno. Así permite ir directamente a él.Y de mis proyect
Disuasión del animal doméstico - manténgalos alejados de las zonas de límites

Disuasión del animal doméstico - manténgalos alejados de las zonas de límites

El problema: nuestro gato disfruta tratando de "pescar" en nuestro acuario. Hay dos soluciones en el mercado para disuadir a una mascota de este tipo de cosas pero son caros y feos. Se me ocurrió algo asequible y discreta, y cabe fácilmente en n
Semáforo de Control de montaje y conexiones VAC 120

Semáforo de Control de montaje y conexiones VAC 120

el propósito de este Instructable es mostrar cómo fabricar un montaje y un tablero de Control de semáforo AC.Por favor VOTE. Más allá de la zona de confort!Esta es mi primera vez instalar un tablero de control la construcción de cualquier tipo y reac
Esqueletos de escalar las paredes de la casa

Esqueletos de escalar las paredes de la casa

¿Así que quieres ser de la casa (Mieda) fresca en la calle este Halloween, pero no sólo cómo poner su decoraciones al aire libre en la parte superior? Por qué no añadir un toque real y tiene un enjambre de esqueletos escalar las paredes de su casa en
Mac Pro polvo prueba caso - corte Laser

Mac Pro polvo prueba caso - corte Laser

Un buen amigo mío hace un montón de proyecciones polvorienta con su nueva Mac Pro torre. Me preguntó si yo podría construir lo algo para mantener el polvo fuera así que me puse a trabajar. Tengo una tienda de madera y un cortador láser que yo he esta
Realidad aumentada fenomenal nos permite ver cómo las cosas nos miran!

Realidad aumentada fenomenal nos permite ver cómo las cosas nos miran!

En mi infancia descubrí un interesante fenómeno: si conectado una fuente de luz a un receptor de televisión suficientemente amplificada, y saludó la luz por delante de una cámara de vídeo, pude obtener la luz para funcionar como una pantalla 3D de re
Cómo ejecutar un reloj eléctrico de batería de las pilas

Cómo ejecutar un reloj eléctrico de batería de las pilas

Pocos proyectos electrónicos son tan simples como esta. Atraerá a quienes sacar una patada de extraer los últimos vestigios de la energía de baterías agotadas.Paso 1: Resumen Mayoría de los hogares tiene varios ejemplos de un reloj que contiene al ti
CO2 Refrigerador de agua del Laser

CO2 Refrigerador de agua del Laser

Refrigerador de agua de láser de CO2Tubos de láser de CO2 se enfrían o bombeo de agua a través del tubo. Esto es necesario para prolongar la vida útil del tubo que de otra manera sobrecalentarse y perder rápidamente energía y eventualmente dejar de f