Asociatyviniai masyvai

 

Asociatyvinis masyvas (angl. hashes) - tai skaliarinių reikšmių masyvas, pasižymintis tuo, kad kiekvienam jo elementui priskiriamas asociatyvinis skaliaras, vadinamas raktu. Taigi, skirtingai nei paprastame masyve, asociotyviniame masyve elementų indeksai yra ne natūriniai skaičiai, o atitinkami skaliarai.  Raktų pagalba vienareikšmiškai identifikuojami asociotyvinių masyvų elementai.

Asociatyvinio masyvo pavadinimas prasideda simboliu %  Pvz. %hash, %var.

Priskiriant asociatyvinio masyvo elementams reikšmes ir raktus, jie atskiriami kableliais. Priskyrimas visada vyksta poromis t.y. pirma eina raktas, po to elemento reikšmė, pvz:

%hash_a = (1,"fred",2,"barney",3,"betty",4,"wilma");
%hash_b = ("first","fred","second","barney","third","betty","fourth",1.58);


Asociatyvinio masyvo elementai

Kreipiantis į masyvo elementą, nurodomas jo raktas figūriniuose skliaustuose { }, pvz:

$c = $hash_b{"first"};                          # $c reikšmė lygi masyvo pirmajam elementui t.y. fred
$hash_b{"fouth"}++;                             # %hash_b ketvirtas elementas padidinamas 1 ir dabar lygus 2.58
$hash_a{1} = 4;                                 # %hash_a pirmas elementas pakeičiamas į 4
print $hash_b{"fourth"};                        # išveda %hash_b elementą, turintį raktą "fourth"


Asociatyvinio masyvo funkcijos

keys(%hash) - išveda masyvo %hash raktų sąrašą. Jei masyvas tuščias, resultatas tuščias sąrašas.
    %hash_a = (1,"fred",2,"barney",3,"betty",4,"wilma");
    @list = keys(%hash_a);                  # masyvo @list elementai (1,2,3,4);

values(%hash) - išveda masyvo %hash elementų sąrašą.
   
%hash_a = (1,"fred",2,"barney",3,"betty",4,"wilma");
    @var = values(%hash_a);                 # masyvo @var elementai ("fred","barney","betty","wilma");

reverse(%hash) sukeičia asociatyvinio masyvo raktus su elementais, pvz:
    %hash_a = (1,"fred",2,"barney",3,"betty",4,"wilma");
    %backwards = reverse(%hash_a);
    print %backwards;                        # rezultatas betty3fred1barney2wilma4

Kaip matome, funkcija reverse() ne tik sukeičia asociatyvinio masyvo raktus ir elementus vietomis, bet ir pačios raktų-elementų poros išdėstomos kita tvarka.

each(%hash) -  funkcija, gražinanti asociatyvinio masyvo rakto-elemento porą. Ši funkcija gali būti sėkmingai naudojama cikluose, pvz:
    while (($first,$last) = each(%lastname)) {
        print "Raktas $first elemntas $last\n";}

Naudojant %hash  skaliariniame kontekste, sužinome ar masyvas tuščias, pvz:
    if (%somehash)
    { # jei true, tada .... }

delete $hash{'key'} -  funkcija, ištrinanti asociatyvinio masyvo rakto-elemento porą, pvz:
    %fred = ("aaa","bbb",234.5,34.56);
    delete $fred{"aaa"};

Asociatyviniuose masyvuose galima operuoti iš karto keliomis reikšmėmis, pvz.

    @score{"fred","barney","dino"} = (205,195,30);     #sukuriamas masyvas ("fred",205,"barney",195,"dino",30)


Į turinį