Codering van verbindingen in Perl (2 / 6 stap)

Stap 2: Eenvoudig Model


Perl heeft in wezen 3 primitieve gegevenstypen. Steken, geïndexeerde arrays en associatieve arrays.
Zeer vroeg op, ontdekte ik dat het was makkelijker voor mij om te werken met verwijzingen naar deze structuren, en de referentie waar nodig. Associatieve arrays lenen zich goed voor sleutelwaarde paringen. Dit is echter niet het einde van deze overweging, zoals een sleutel aan meer dan één waarde toewijzen kan. Afhankelijk van de toepassing, kan strikt het definiëren van de waarde van de vereniging een voorafgaande waarde wissen. Dus laten we zien hoe we kunnen model meerdere waarden die worden toegewezen aan een sleutel.

Houd rekening met de volgende methoden:

Code:

 #!/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; 

Uitgang:

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

In elk van deze benaderingen, het gedrag wordt bepaald door het bestaan / definitie van de sleutel. Bovendien, hefboomwerking de methoden Perls "autovivification" concept. Elke sleutel zal opbouwen van een reeks "tokens." In de eerste benadering, wordt de waarde van een sleutel direct gebruikt als een tekenreeks. Als meer dan één token vereist is, wordt deze toegevoegd aan de tekenreeks gescheiden door een willekeurig karakter. In dit geval zou het een komma, maar meer in het algemeen, het kan worden geselecteerd, zodat tokenizing met de split-functie. In de tweede benadering, is de waarde gescheiden gehouden doordat ze een andere laag van de vereniging. Uiteindelijk zal de hash moet een waarde worden toegewezen. Het kan worden ingesteld op een willekeurig aantal waarden. De geselecteerde waarde wordt geïnitialiseerd als 1 en oplopend in de daaropvolgende registraties. De derde benadering wordt gekeken naar het gebruik van geïndexeerde arrays voor elk van de waarden.

De eerste benadering werd gebruikt in een implementatie, waar ik had een beetje meer van een tijdkraken. Het toont haar opvoeding als iets gebruikt voor het verwerken van CSV-bestanden. Ik vond dat als penningen werd ingewikkelder werd het moeilijker en moeilijker om te plukken van een betrouwbare token scheidingsteken. Toen ik had tijd terug te gaan en het evalueren van alternatieve benaderingen vond ik dat ik vond de tweede benadering. Waar bood als de derde aanpak omslachtig voor mijn toepassing, de tweede benadering de mogelijkheid te creëren een unieke lijst met het bijkomend voordeel van het tellen van het aantal keren dat het paar werd gedefinieerd. In mijn toepassing was de volgorde van invoer niet belangrijk, zolang zijnde kundig voor itereren over de hele set van sleutels. toepassingen waar bestellen belangrijker is, zinvoller met behulp van arrays.

Nu laten we eens kijken wat we kunnen doen met aanpak nummer 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; 

Uitgang:

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

Merk op hoe de sleutels en waarden hebben verwisseld, en dat de telling van de koppeling blijft hetzelfde.

Gerelateerde Artikelen

Codering van een kubus

Codering van een kubus

Terug te keren naar de vorige les: OverzichtLes overzicht:In deze les leert u hoe maak je de code voor een eenvoudige kubus-vorm.Bekijk het hele project van de "Tinkercoding een huis met Shape Generators" op TinkercadStap 1: Application Programm
Geautomatiseerde verlichting met behulp van DMX en Perl

Geautomatiseerde verlichting met behulp van DMX en Perl

waarom automatiseren uw verlichting?Nou, om eerlijk te zijn, de meeste van mijn huis is geautomatiseerd zo leek het duidelijk om te doen.Er zijn tal van voordelen in het automatiseren van onderdelen van uw huis, verlichting in het bijzonder gewoon ma
Codering van het huis

Codering van het huis

Terug te keren naar de vorige les: Maken van de muren van het huisLes overzicht:In deze les leert u hoe te combineren meerdere vormen om de vorm van een gebogen deur te maken.Bekijk het hele project op TinkercadStap 1: Maak een kleiner blok op hol ui
Batch-codering van tutorial ik

Batch-codering van tutorial ik

Batch-codering is een zeer fundamentele programmeertaal die zou moeten op elke windows-computer werken (niet apple al) vandaag ik zal u tonen de basisprincipes van de programmeertaal.Stap 1: Om te beginnen Open het start menu en Typ Kladblok open Kla
Codering van een externe IO Brainboxes apparaat te tellen

Codering van een externe IO Brainboxes apparaat te tellen

Deze gids zal worden met behulp van Visual Studio in visual C#. Het zal worden codering voor 2 ED lijningangen die "per item" en "dagelijkse prestatiemeteritem heten". U een naam kunt geven wat je wilt, deze regels zijn niet verbonden
Codering van webbrowser voor Windows 10 IOT op Raspberry PI 2

Codering van webbrowser voor Windows 10 IOT op Raspberry PI 2

Als per de de video-tutorial u zou nood voor downloaden van Visual Studio 2015 Gemeenschaphttps://dev.Windows.com/en-us/downloadsStap 1: Laat kijken naar de codeDe code voor dit voorbeeld is vrij eenvoudig:Een besturingselement ingesloten webviewText
Pixelart Tutorial met Charms van Hama of Perler kralen

Pixelart Tutorial met Charms van Hama of Perler kralen

Vele mogelijkheden met deze kleine jongens! Veel plezier!
De basisprincipes van HTML en CSS codering

De basisprincipes van HTML en CSS codering

Heb je ooit wilde maken van uw eigen website, maar die andere webbuilders zijn te duur? Zoek niet verder voor een intro naar HTML en CSS programmeren en coderen.Stap 1: Instellen Elke HTML en CSS codering van de pagina begint met deze blanco vel, gen
Combinatiehangslot met behulp van Intel Edison

Combinatiehangslot met behulp van Intel Edison

Hallo, ben ik zeker dat u kan een van deze combinatieslot weergegeven in de afbeelding hebt gebruikt. Ook wil u graag een elektronisch slot die net als deze werkt? Zo ja, dan dit is instructable voor jou. Dit kan worden gebruikt om te beveiligen uw e
Het gebruik van een LED-Array Module

Het gebruik van een LED-Array Module

met een enkele LED kun je de staat van iets: in- of uitschakelen. Dat zou een beetje saai. Met een array van LEDs kunt u tekens of zelfs sommige eenvoudige hoekig afbeeldingen weergeven. Dat zou een beetje pizzaz toevoegen aan een kleine microcontrol
Transformatie van oude printer aan geautomatiseerde stempelmachine

Transformatie van oude printer aan geautomatiseerde stempelmachine

Dit is de beste transformatie die ik ooit had gedaan, vond ik een oude printer die werkloos in mijn berging is en ik dacht bij het maken van sommige transformatie met het en jongens kijken het is voor je ik ben blij om dit met u delen kerels :-)Progr
Wekker met behulp van Atmega-328 en RTC

Wekker met behulp van Atmega-328 en RTC

Hi iedereen! Dit is mijn eerste instructable! Na het lezen van honderden instructables, besloten heb ik om mezelf.Klok is een van de meest essentiële dingen van huis houden. Er zijn verschillende soorten klokken zoals goede oude klokken van de slinge
DIY Laptop Cooling systeem van schroot

DIY Laptop Cooling systeem van schroot

Welkom iedereen. Dit instructable is op het maken van DIY Laptop koelsysteem van gemakkelijk beschikbare materialen en kladjes. Hoewel laptop koelsystemen niet zijn zeer duur of moeilijk te vinden. Maar een ander plezier in het maken van je eigen hee
Hoe te repareren van een lichtnetadapter

Hoe te repareren van een lichtnetadapter

dus zo veel als ik genieten van Asus, ben ik momenteel ongelooflijk geïrriteerd met de lichtnetadapter die kwam met mijn huidige eeepc. De voorplaat van de adapter is altijd een beetje dun, en gisteren toen ik haalde de adapter uit het stopcontact, d