T°φd∞nφ


Pro t°φd∞nφ mß perl operßtor sort(), kter² t°φdφ prvky ve vzestupnΘm po°adφ (Φφsla, pφsmena - velkß, malß). Operßtor sort() vracφ set°φd∞n² seznam.

P°φklad:

Nßsledujφcφ sekvence p°φkaz∙ t°φdφ pole x a v²sledek uklßdß do pole y.

@x = (zdenek,14,borek,1,84,Cesta,2);
@y = sort(@x);
print "@y \n";
P°φkaz print zobrazφ:
1 14 2 84 Cesta borek zdenek

VÜimn∞te si, ₧e Φφsla v seznamu nejsou t°φd∞na numericky, ale jako °et∞zce (1 14 2 ...).

PokroΦilΘ t°φd∞nφ

Perl poskytuje prost°edky i pro jinΘ zp∙soby t°φd∞nφ. Je mo₧nΘ t°φdit seznam v sestupnΘm po°adφ nebo numericky.

Ke t°φd∞nφ jin²m ne₧ standardnφm zp∙sobem je pot°eba definovat porovnßvacφ postup (proceduru), kter² popφÜe, jak porovnat dva prvky. Tato procedura se bude volat pro ka₧dΘ dva prvky seznamu. Procedura musφ urΦit, zda je prvnφ prvek menÜφ, roven nebo v∞tÜφ ne₧ druh² prvek a vrßtit v²sledkov² k≤d. PorovnßvanΘ hodnoty jsou do procedury p°edßvanΘ jako globßlnφ prom∞nnΘ $a a $b.

V²sledkov² k≤d porovnßvacφ procedury je:

Pro pokroΦilΘ t°φd∞nφ pou₧ijeme volßnφ: sort(jmΘno_procedury seznam).

P°φklad procedury, kterß porovnßvß numericky:

sub numericke {
  if ($a < $b) {
     -1;
  }
  elsif ($a == $b) {
      0;
  }
  elsif ($a > $b) {
      1;
  }
}
P°φklad numerickΘho t°φd∞nφ:
@cis = (34,20,2,13,1,106);
@tcis = sort(numericke @cis);
print "$tcis[0] $tcis[1] $tcis[2] $tcis[3] $tcis[4] $tcis[5]\n";

P°φkaz print v p°φkladu vypisuje tento seznam: 1 2 13 20 34 106.

Jednφm z operßtor∙ perlu je operßtor pro numerickΘ porovnßnφ <=>, kter² vracφ hodnoty:

Pomocφ tohoto operßtoru je mo₧nΘ proceduru numerickΘ zkrßtit do tvaru:
sub numericke {
  $a <=> $b;
}
nebo zapsat p°φkaz pro t°φd∞nφ p°φmo ve tvaru:
@tcis = sort ({$a <=> $b} @cis)

T°φd∞nφ celΘho asociativnφho pole

V kapitole Asociativnφ pole jsme uvedli funkci foreach, kterß postupn∞ pracuje s ka₧d²m prvkem asociativnφho pole. Do tΘto funkce je mo₧nΘ doplnit slovo sort, kterΘ zajistφ zpracovßnφ klφΦ∙ nebo hodnot asociativnφho pole ve vzestupnΘm po°adφ.

P°φklad:

%pole = ("prvni",24,"druhy",34,"treti",44);
foreach $klic (sort keys %pole) {
        print "$klic $pole{$klic}\n"; 
}
Uvedenß sekvence p°φkaz∙ tiskne prvky asociativnφho pole %pole vzestupn∞ set°φd∞nΘ podle klφΦ∙. Tedy:
druhy 34
prvni 24
treti 44


DalÜφ kapitola | P°edchozφ kapitola kapitola | Obsah

PEGASNETPEGASNET

PEGASNETPEGASNET

PEGASNETPEGASNET

PEGASNETPEGASNET