LINUX.ORG.RU

Массив на PERL


0

1

Я с перлом на ВЫ. Есть массив из большого числа повторяющихся элементов, каким образом можно их отсортировать по популярности, повторы, соответственно, убрать. подскажите каким образом реализовать


$ echo -e '111\n666\n333\n111\n444\n666\n666' \
> |awk '{_[$0]++}END{PROCINFO["sorted_in"]="@val_num_desc"; for (i in _) print _[i], i}'
3 666
2 111
1 444
1 333

с перлом **бись сам.

anonymous
()
Ответ на: комментарий от anonymous

Ни фига у них цены...

Мне-то хорошо, я если что в O'Reilly куплю.

Beginning Perl и Modern Perl можно легально скачать за просто так.

Hoodoo ★★★★★
()
#!/usr/bin/perl 

use strict;
use warnings;

sub uniq {
    foreach (@_) {
        my %hash = map { $_, 1 } @$_;
        @$_ = keys %hash;
    }
}

my @A = (1,2,3,1,3,4,5,2,2,3,4,5,2,3,2,4,3,3,5,6,4,1,2,4,);

my %rate = ();

$rate{$_}++ foreach @A;

my @uniq_A = @A;
uniq \@uniq_A;

my @sorted = sort {$rate{$b} <=> $rate{$a}} @uniq_A;

print "@sorted\n";
r2d2
()
Ответ на: комментарий от r2d2
#!/usr/bin/perl 

use strict;
use warnings;

my @A = (1,2,3,1,3,4,5,2,2,3,4,5,2,3,2,4,3,3,5,6,4,1,2,4,);

my %rate = ();

$rate{$_}++ foreach @A;

my @uniq_A = keys %rate;

my @sorted = sort {$rate{$b} <=> $rate{$a}} @uniq_A;

print "@sorted\n";
r2d2
()
Ответ на: комментарий от r2d2

Эх вы, зачем портить человеку удовольствие от освоения этого замечательного языка?

@A = (1,2,3,1,3,4,5,2,2,3,4,5,2,3,2,4,3,3,5,6,4,1,2,4,);
$s = join '', sort @A;
push @a, $1 while $s =~ /\G(\d*?(\d))(?!\2)/gc;
map { print substr $_, 0, 1 } sort { length($a) <=> length($b) } @a
helios ★★★★★
()
Ответ на: комментарий от Xellos

Чтобы заинтересовать человека.

Не будьте занудой. Очевидно, что задачи написать оптимальный код я перед собой не ставил. Мне хотелось написать интересный код :)

И да, r2d2 уже написал хороший код. Хеш и сорт - это как раз то, что нужно в данном случае.

helios ★★★★★
()
Ответ на: комментарий от helios

Вот записать решение r2d2 покороче - и будет интересный код. А строка и регекспы у меня бы вызвали СПГС и синдром неполноценности от невозможности нахождения ГС.

Xellos ★★★★★
()
Ответ на: комментарий от Xellos
@A = (1,2,3,1,3,4,5,2,2,3,4,5,2,3,2,4,3,3,1,2,4,);
++$h{$_} for @A;
print sort { $h{$a} <=> $h{$b} } keys %h;

Вы про это? Это же скучно. А вот регэкспы, заглядывание вперёд - вот где веселуха :)

helios ★★★★★
()
Ответ на: комментарий от helios

Ехать из Москвы в Свердловск через Аляску - тоже веселуха... Особенно для человека, который почти не разбирается в предмете.

Xellos ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.