ohjeita web-sivuston tekijälle
Tavalliset taulukot sallivat pääsyn elementteihinsä numeron avulla. Taulukon @food ensimmäinen elementti on $food[0], toinen vastaavasti $food[1] jne. Perl sallii myös luoda taulukoita, joiden elementteihin päästään merkkijonon avulla. Näitä kutsutaan assosiatiiveiksi taulukoiksi (associative arrays).
Haluttaessa määritellä tällainen taulukko käytetään sulkuja, mutta itse taulukon nimen ensimmäinen merkki on %. Esimerkiksi:
%ages = ("Michael Caine", 39, "Dirty Den", 34, "Angie", 27, "Willy", "21 in dog years", "The Queen Mother", 108);
Nyt ikä saadaan selville seuraavasti:
$ages{"Michael Caine"}; palauttaa 39
$ages{"Dirty Den"}; palauttaa 34
$ages{"Angie"}; palauttaa 27
$ages{"Willy"}; palauttaa "21 in dog years"
$ages{"The Queen Mother"}; palauttaa 108
Huomaa, että kuten tavallisten taulukoidenkin tapauksessa jokainen % -merkki on muuttunut dollarimerkiksi koska yksittäiset elementit ovat skalaareita. Taulukoista poiketen indeksi, tässä tapauksessa henkilön nimi, sijoitetaan aaltosulkeisiin.
Assosiatiiviset taulukot voidaan muuttaa takaisin tavalliseksi taulukoksi merkitsemällä se tavallisen taulukon arvoksi ja päinvastoin. Ideaalitapauksessa tavallisessa taulukossa on parillinen määrä elementtejä:
@info = %ages; @info on taulukko, jolla on 10 elementtiä $info[5]; palauttaa taulukon @info viidennen arvon, joka on 27 %moreages = @info; %moreages on assosiatiivinen taulukko, joka on sama kuin %ages
Assosiatiivisen taulukon elementeillä ei ole mitään järjestystä, mutta on mahdollista päästä käsiksi kaikkiin elementteihin vuorollaan käyttäen keys- ja values -funktioita:
foreach $person (keys %ages)
{
print "I know the age of $person\n";
}
foreach $age (values %ages)
{
print "Somebody is $age\n";
}
Kun keys-funktiota kutsutaan se palauttaa listan taulukon avaimista ( keys ), jotka ovat taulukon indeksejä. Kutsuttaessa funktiota values palautetaan taulukon arvot listana. Nämä funktiot palauttavat listansa samassa järjestyksessä, mutta sillä ei ole mitään tekemistä tietojen syöttöjärjestyksen kanssa. Kutsuttaessa fuktioita keys ja values skalaarikontekstissa ne palauttavat avain/arvo ( key/value ) parien lukumäärän associative array: ssa. On myös funktio each, joka palauttaa kahdesta elementistä koostuvan listan, jonka elementit ovat avain ja sen arvo. Joka kerta kun each-funktiota kutsutaan se palauttaa seuraavan avain/arvo-parin kunnes kaikki on käyty läpi:
while (($person, $age) = each(%ages))
{
print "$person is $age\n";
}
Seuraava sivu: Operaattorit.
Perlissä operaattorit "," eli pilkku ja "=>" eli oikealle osoittava nuoli ovat toistensa synonyymejä. Useimmiten assosiatiivisten taulukoiden yhteydessä näkee käytettävän näitä vuorotellen seuraavaan tapaan:
%Kaverit = ( "Kalle" => "Kiva", "Ville" => "Hassu" );
mikä on siis perlin kannalta täsmälleen sama kuin kirjoittajan käyttämä notaatiotyyli
%Kaverit = ( "Kalle", "Kiva", "Ville", "Hassu" );
mutta assosiatiivisuus on mielestäni helpommin luettavissa ensimmäisestä muodosta.
Kiitos selvityksestä assosiatiivista taulukoista, erittäin valaiseva :)