Perl:如何按出现次数排序和转换数组的项目

时间:2013-10-24 13:47:13

标签: arrays perl

首先发布此帖(以及我正在尝试制作的程序!)。

我不确定这是否可行,但我想要做的是将数组按其中的项目出现的次数排序,然后将它们出现的次数转换为数字。

由此:

@array = (blue, red, blue, green, red, blue)

我想创建这个:

@array1 = (blue, blue, blue, red, red, green)

然后我想创建它:

@array2 = (3, 2, 1)

提前致谢!

1 个答案:

答案 0 :(得分:2)

my @array = qw(blue red blue green red blue);

my %seen;
$seen{$_}++ for @array;

my @array1 = sort { $seen{$b} <=> $seen{$a} } @array;
my @array2 = sort { $b <=> $a } values %seen;

%seen是哈希,它保存每种颜色的频率/计数:

   blue  => 3,
   red   => 2,
   green => 1,

第一种排序使用散列作为计数查找,以便按相应出现次数的降序对颜色进行排序。第二种排序是哈希值(1,2,3)的简单数字降序排序。