首先发布此帖(以及我正在尝试制作的程序!)。
我不确定这是否可行,但我想要做的是将数组按其中的项目出现的次数排序,然后将它们出现的次数转换为数字。
由此:
@array = (blue, red, blue, green, red, blue)
我想创建这个:
@array1 = (blue, blue, blue, red, red, green)
然后我想创建它:
@array2 = (3, 2, 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
)的简单数字降序排序。