2

在这里的第一篇文章(以及我正在尝试为此制作的程序!)。

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

由此:

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

我想创建这个:

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

然后我想创建这个:

@array2 = (3, 2, 1)

提前致谢!

4

1 回答 1

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) 的普通数字降序排序。

于 2013-10-24T13:49:51.700 回答