Masyvai

 

Masyvas - tai kintamasis, kuriame saugomas skaliarinių kintamųjų sąrašas. Kiekvienas masyvo elementas yra skaliarinis kintamasis, turintis savo skariarinius duomenis. Masyve gali būti bet koks elementų skaičius. Mažiausias masyvas yra tuščias, didžiausias priklauso nuo kompiuterio operatyviosios atminties dydžio.
Masyvo pavadinimas prasideda simboliu @ Pvz. @array, @var. Masyve indeksai skaičiuojami nuo 0 ir apskliaudžiami [ ] kaip C/C++.

Priskiriant masyvo elementams reikšmes, jos atskiriamos kableliais, pvz:

@array = ("fred","barney","betty","wilma");

Masyvą  gali sudaryti skirtingų tipų literalai, pvz:

@array1 = ("Fred", 4.58, "Betty", Vilma", 1.58e+9);

Masyvo elementai gali būti ne tik literalai, bet ir skaliariniai kintamieji. Pvz:

@array2 = ("Fred", 4.58, "Betty", $var1, $var2);

Apibrėžiant masyvo reikšmes, galima naudoti sarašo konstruktoriaus operatorių ( .. ), kuris konstruoja masyvą pagal užsiduotas pirmąją ir paskutiniąją intervalo reikšmes, atitinkamai didindamas 1, pvz:

@array2 = (1 .. 5);          # tas pats, kaip  (1, 2, 3, 4, 5)
@array2 = (1.2 .. 5.2)       # tas pats, kaip  (1.2, 2.2, 3.2, 4.2, 5.2)
@array2 = (2 .. 6,10,12);    # tas pats, kaip  (2,3,4,5,6,10,12)


Masyvo elementai

Kreipiantis į masyvo elementą, nurodomas jo numeris laužtiniuose skliaustuose [ ], pvz:

$c = $masyvas[0];                               # $c reikšmė lygi masyvo pirmajam elementui
$fred[2]++;                                     # @fred antras elementas padidinamas 1
$fred[1] += 4;                                  # prie antro elemento pridedama 4
($fred[0],$fred[1]) = ($fred[1],$fred[0]);      # sukeičiami pirmas ir antas elementai

Keli masyvo nariai gali būti priskirti kitam masyvui:

@x = array[1, 5 ,6 ];
@fred[1,2] = (9,10);        # masyvo fred antram ir trečiam elementui suteikiamos reikšmės 9 ir 10
 
Simboliai $# (pvz. $#array) naudojami norint sužinoti paskutinio masyvo elemento indeksą.
Jei masyvo indekso elementas neigiamas, gaunami atitinkami elementai iš dešinės. Pvz. kai indeksas [-1] išvedamas paskutinis masyvo elementas.

@fred = ("fred", "wilma", "pebbles", "dino");
print $fred[-1];                            # atsakymas "dino"
print $#fred;                               # atsakymas 3
print $fred[$#fred];                        # atsakymas "dino"


Masyvų funkcijos

splice(@array, first, amount, list) - pakeičia masyvo @array  narių skaičių amount pradedant nuo first, duotomis reikšmėmis iš list.

pop(@array) - iš masyvo @array pašalina paskutinįjį narį ir jį gražina kaip funkcijos rezultatą, pvz:
    $oldvalue=pop(@array);     # pašalina paskutinį narį iš  @array

push(@array, $newvalue) - masyvą @array papildo nauju elementu, pvz:
    push(@array,$newvalue);    # tas pats kaip ir @array = (@array, $newvalue)

Kaip matome funkcijos pop() ir push() keičia masyvus iš "dešinės". Egzistuoja panašios funkcijos, kurios keičia masyvus iš "kairės".

shift(@array) - iš masyvo @array pašalina pirmąjį narį. Be to jis grąžinamas, kaip funkcijos rezultatą, pvz:
    $x=shift(@fred);           # tas pats kaip ($x,@fred) = @fred;

unshift(@array, value) -  masyvo pradžioje įterpia naują elementą value, pvz:
    unshift(@fred,$a);         # tas pats kaip @fred=($a,@fred);
    unshift(@fred,$a,$b,$c);   # tas pats kaip @fred=($a,$b,$c,@fred);

Jei masyvas, nurodytas funkcijose pop(), shift() yra tuščias, gražinama reikšmė undef .

reverse(@array) -  išdėsto masyvo elementus atvirkštine tvarka, pvz:
    @a = (7,8,9);
    @b = reverse(@a);          # @b masyvą sudaroelementai (9,8,7)

sort(@array) -  rūšiuoja masyvo elementus didėjančia tvarka. Masyvo elementai traktuojami kaip eilutės, o rūšiavimas atliekamas ASCII lentėlės
                            pagrindu. Naudoti funkciją sort()reikia apgalvotai, nes rūšiavimo rezultatas gali būti netoks, kokio tikimasi, pvz.
    @y = (1,2,4,8,16,32,64);
    @y = sort(@y);             # @y elementai išdėstomi sekančiai:  1,16,2,32,4,64,8

Funkcijos reverse ir sort nekeičia masyvo, nurodyto kaip funkcijos argumentų sąraše. Funkcijų rezultatas yra modifikuotas (suleista elementų išdėstymo tvarka)  masyvas.

chomp(@array) - pašalina iš kiekvieno masyvo elemento naujos eilutės simbolį. Funkcija chomp() taikoma ir skaliariniams kintamiesiems.
    @stuff = ("hello\n","world\n","happy days");
    chomp(@stuff);             # @stuff  dabar turi tokias reikšmes ("hello","world","happy days")

Į turinį