Hash-ek (asszociatív tömbök) Perl

Hash - az asszociatív tömb, mert adathozzáférés végezzük a kulcs társított értéket. Hash előtagja%. % Hash. Dolgozni egy hash tömb van szükség, mint a hagyományos tömbök, használt dereference $ prefix. $ Hash = szürke;

A hash lehet meghatározni többféleképpen:

Ha a teret meghatározásához használt hash elem, ez a különbség jobb, hogy aposztrófok $ hash = szürke;

Elemek hozzáadása egy hash, akkor:

Hash jelenlétének ellenőrzése az elem:

Termék eltávolítása a hash, akkor használja a törlés funkciót.

Törlés funkció lehet nevezni a hash szelet, így eltávolítása ezeket a gombokat: törölni @hash; cm. perlfunc (1)

Ahhoz, hogy végigjárjuk az elemek egy hash, akkor kell használni minden funkciót:

Végiglépkedhetünk a hash nem túl nagy, akkor a foreach:

Az előnye, hogy mindegyik a kulcs / érték párokat eltávolítjuk egyesével, ha a hash tartalmaz túl sok kulcs, az elutasítás előtti épület teljes lista memóriát takarít meg és az idő, de a funkció az egyes ellenőrző nem teszi lehetővé a párok a feldolgozási eljárás. Bust hash segítségével, miközben tölti kevés memóriát. Lehet bármilyen módon formázni a kimenet, akkor kell csak két skalár változó, a kulcs és az érték.

Foreach ciklus végigmegy egy listát az előre épített kulcsot, így nem tud semmit a rajt után a ciklus körülbelül hozzáadásával vagy eltávolításával a kulcsokat, a kulcsok adunk a ciklusban nem automatikusan szerepel a listán a keresett kulcs és távirányító gombokkal a cikluson belül nem törlődnek a listából.

tudja megjeleníteni a tartalmát a hash, és így:

Következtetés hash egy string.

akkor használja a térképet. térkép nyomtatása $ hash \ n „> billentyűk% hash;

térkép funkció lehetővé teszi, hogy működjön együtt az elemek tetszőleges sorrendben, ebben az esetben, egy listát a húrok (kulcs => érték) át a nyomtatási funkciót. Ha tárolja a hash egy ideiglenes tömb, akkor az megjelenik a szöveg:

Azt is származhat a hash, és így: print „@ \ n”;

Az utóbbi két esetben azt interpoláljanak a hash-lista, amely nem teszi lehetővé, hogy előre vagy ellenőrzik a rendelést pár O „kulcs / érték”. Az adatok az utolsó két esetben jelenik meg a listában kulcsokat és értékeket, amelyek elemei vannak elválasztva aktuális tartalmát a $. „Azaz, nem lesz képes levezetni az értékeket, mindegyik pár külön sorban vagy külön gombok értékek bármilyen karaktert. Itt van egy program, ami beolvassa postafiók fájlt, és megjeleníti az üzenetek száma az egyes küldő, a feladó által meghatározott vezetéken (cél a program csak a működését mutatja be a hash):

Kezdés az olvasó program postafiók: bash-2.03 $ ./1.pl / usr / home / vovka / mbox

Végiglépkedhetünk a hash a behelyezés érdekében, mivel kulcsok és mindegyik kimenete a hash elemek elromlott, akkor a modul Tie :: IxHash

Modul Tie :: IxHash teszi kulcsok funkciót. Minden érték és visszatérő elemeket annak érdekében, hogy be a hash. Ha nincs ilyen modult IxHash.pm kell menni a CPAN / modulokat. megtalálja és telepíti azt, ha nem rendelkezik jogokkal kell telepíteni a könyvtárak, az első sorban a forgatókönyvet írni #! / put „/ do / perl'a -wT -I / put” / do / nugnogo / modulia. Alkalmazási példa Tie :: IxHash:

cm. A dokumentáció modul Tie :: IxHash.

hogy álljon sorban verzió $ tty = $ tty multi-értékű hash-eket. Minden terminál nevét interpolált a sorban print @>.

Invertáiása hash készülnek a segítségével a fordított funkció. ahol a kezdeti hash-értékek társulnak kulcsot, és fordítva. Az általunk használt lista-ekvivalencia-kivonatok. A lista az összefüggésben, reverz ieterpretiruet% hash egy listában, és visszafordítja annak alkotóelemeire. Például: van egy hash% Glavfish = ( "seledka" => "mokraia", "SKAT" => "elektricheskij"). ha úgy értelmezzük, hogy a listát, akkor a következő ( "seledka", "mokraia", "Skat", "elektricheskij"). átfordítása után a lista így néz ki: ( "elektricheskij", "Skat", "mokraia", "seledka"). értelmezése, mint egy hash ad a következő: ( "elektricheskij" => "SKAT", "mokraia" => "seledka"). Egy példa a program, amely a nevét a téma adja az ő tulajdonát, és fordítva:

Válogatás alfabetikus billentyűk kapcsolódó értékek:

Válogatás hosszabb kapcsolódó értékek:

Példa a fido7.ru.perl. Az egyesülés kerül végrehajtásra hash és tömbök egyesülés:

Ahhoz, hogy menteni a memória, akkor használd ezt a kódot:

Ha meg kell találni megfelelő kulcsokat és egyéb non-hash, meg kell szervezni a keresést a hash kulcs a gombok használatával, és ellenőrizze, hogy a jelenlegi kulcs egy másik hash. Keresés az egyező gombok:

Keresési kulcsok, amelyek nem a drugm hash:

Átalakított egy linket nem lehet vissza az előző formában, vált, utalva a vonalat. Létre kell hoznunk egy speciális hash, amelynek kulcsok vannak a linkek, hogy már át a húr, és értékek - ezek ssylki.Mozhno modul használatához Tie :: RefHash. A példa azt mutatja, a használata I / O tárgyak dolgozni fájl manipulátorok.

Ha egy meghatározatlan érték undef használható kulcs. ez átalakul egy üres stringet. undef egy tökéletesen érvényes értéket a hash. De amikor a minta értékeket a kulcs nem a hash perl ad undef. Ellenőrizze a rendelkezésre álló kulcs, akkor: létezik ($ hash); bizonyosság kapcsolódó értékek: meghatározott ($ hash); igazság: if ($ hash);. Néha undef kell a cache, azaz a kulcs, de ez nem jár semmi hasznosat, például egy olyan program, amely meghatározza a méret a fájlok átvitele a listából:

Ez a kód lehetővé teszi, hogy kihagyja null és nem létező fájlokat, de tárolni az eredeti listában.


Hogyan lehet, hogy egy hash egy húr? probléma, mint például:

TNC> Köszönöm, elvtársak :-)
TNC> Ezt megelőzően már két pár. A második kérdés: a naplók http-gw. piszkos a
TNC> van az, hogy minden kérés a naplóban megjelenik 4 sor,
TNC> nem feltétlenül egymást követő:

Hozzon létre egy hash, és tartsa ebben azokat a sorokat, amelyek, durván szólva, nincs lezárva, de nem zárja - eltávolítják. Persze, egy jelentős darabja a fájlt a memóriába is jelen lesz, de nem teljesen azonos. Hány sort ott van a negyedik az első? Ha átlagosan egy-két milliárd a - a hullaházban :-)

Olyasmi, mint a példa a hash és adatbázist fido7.ru.perl (cm választ.): Hogyan kell átadni egy hash függvény? fido7.ru.perl (lásd. a teljes vita)

A legegyszerűbb lehetőség, és ügyetlen -, hogy a hash a megfelelő típusú I => ya osztott vonalak és cserélje elemei tömb a dátumokat. valamit a hasonlóság:

A környezeti változók, a beépített tömbök és hash% INC. % SIG. % ENV. % FORMA<>.

% INC tartalmazza a fájl nevét tartalmazza csapatok nem igényelnek. Key fájl nevét, értékét az elérési utat a fájlban. A tömb listáját tartalmazza @INC értékét dirrektory úgy néz ki, perl futtatni parancsokat csinálni, szükség, vagy használja.

% SIG - hash, amely tárolja a rakodók különböző helyzetek perl. Például vonal helyi $ SIG = sub<>; letiltja a figyelmeztető üzeneteket.

% ENV tartalmazza a környezeti változók (környezetvédelem) meghatározott időpontjában indító szkriptet (script). A kulcsok általában a nevét a környezeti változók (de függ az operációs rendszer), változó ezeket az értékeket okoz változást a környezetet a jövő generációi folyamatokat. program biztosítja:

Közvetlenül a script elemek a hash% ENV, akkor hívja a $ ENV és $ ENV. Bár meg kell nevezni.

% FORM tartalmaz bevitt adatok a formából postán: html formában, például:






Ha belépünk a mező name1 qwe, name2 rty, NAME3 asd majd nyomja meg az elküld, hogy az adatokat továbbítják keresztül STDIN mint: name1 = qwename2 = rtyname3 = HUF és a hash

Értékek neve * mezők kaphat $ form. $ Form stb