perl6.suОсвоим perl6 к 2015 году!

leg


       Способов сортировки три - числовой, алфавитный и смешанный.
    
#!/usr/bin/perl6
my $a=10; my $b=7; my $c='cursor'; my $d='dux';
say $a <=> $b; # $a больше $b
say $a leg $b; # но начинается с меньшего символа
say $a cmp $b; # автоматически используется <=>
# say $c <=> $d; # индиффирентно
say $c leg $d; # $c "меньше", то есть раньше по алфавиту
say $c cmp $d; # автоматически используется leg
Decrease
Increase
Decrease
Increase
Increase

       При сортировке sort по умолчанию используется cmp - сравнение.
       Предположим, у нас проблема. Часть имен записаны с заглавной буквы, часть - нет. Всё равно надо отсортировать имена по алфавиту.
    
#!/usr/bin/perl6
my @list=<Вася петя емеля Джон джордж яша октавиан Николя>;
@list.sort».say;
яша
октавиан
джордж
Джон
петя
емеля
Николя
Вася

       Так нас совсем не устраивает. Предположим, что мы - воспитательница детского сада. Нам позарез необходимо отсортировать подопечных.
    
#!/usr/bin/perl6
my @list=<Вася петя емеля Джон джордж яша октавиан Николя>;
my @sorted=sort { uc($^a) leg uc($^b) }, @list;
@sorted».say;
яша
октавиан
емеля
Джон
петя
Николя
джордж
Вася

       Это - то, что надо. Массив сравнивается попарно, каждая пара заносится в оперативные переменные $^a и $^b, с которыми в фигурных скобках можно вытворять всё, что пожелается душе. Если в нашем примере заменить leg на cmp, то получим тот же результат.
    
#!/usr/bin/perl6
my @list=<Вася петя емеля Джон джордж яша октавиан Николя>;
my @sorted=sort { uc($^a) cmp uc($^b) }, @list;
@sorted».say;
яша
октавиан
емеля
Джон
петя
Николя
джордж
Вася

       Bene. Особенно радует то, что всё хорошо работает и с кириллицей.
# mutatio postrema: 8 Oct 2012

   <=>, $^a, cmp, leg, sort      charta situs       nota LX   

    RSS     stdin@perl6.su    © Alexius Karmanov, 2010-2011