Trideni

Boleslav Bobcik xbobcik na fi.muni.cz
Čtvrtek Prosinec 14 07:38:23 MET 2000


On 13 Dec 2000, Martin Caslavsky wrote:

> > potreboval bych setridit napr.: @pole = ('Praha 1', 'Praha 2', 'Praha 4',
> > 'Praha 6', 'Praha 2', 'Brno', 'Plzen');
> > tak aby bylo setrideno podle abecedy a pak podle cisla, tedy:
> > Brno, Plzen, Praha 1, Praha 2, Praha 2, Praha 4, Praha 6.
> 
> To asi bude chtit porovnavat jako retezce (funkci cmp) a ne jako cisla
> (implicitne funkci <=>).
> Teda neco jako print sort {$a cmp $b} @pole;
> Jinak tenhle priklad je hned na prvni strance dokumentace k funkci sort,
> takze nechapu, jak jste to mohl prehlednout.

Pan Kunc asi mel na mysli to, ze sort spolu s cmp spravne nesetridi napr.
'Praha 2', 'Praha 11', ale naopak.

Muj navrh by byl (nezkousel jsem, pisu z hlavy) neco jako

@vysledek = sort
  {
    my ($mesto1,$cislo1)= $a =~ m{^(.*) (\d*)$};
    my ($mesto2,$cislo2) =$b =~ m{^(.*) (\d*)$};
    return $mesto1 cmp $mesto2 or $cislo1 <=> $cislo2
  }
  @mesta;

--Boleslav Bobcik
  mailto:xbobcik na informatics.muni.cz
  http://www.fi.muni.cz/~xbobcik



Další informace o konferenci Perl