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)