1

对于我在使用 perl 时遇到的这个问题,我很高兴能得到一些建议。

如果我有一个数组并且它包含例如以下整数:

1, 2, 3, 1, 1, 1, 1, 7, 1, 4, 1, 1, 1

一旦我使用哈希计算了键的计数,键值对将是:

1 => 9, 2 => 1, 3 => 1, 4 => 1, 7 => 1

我可以将两组数字(键和值)分配给不同的数组以供以后使用,但是如果我现在想要一个如下所示的数组:(9, 1, 1, 1, 0, 0, 1)值对应于键的位置,0's 表示没有的键出现在列表中,即5and 6,我将如何在 perl 中编写代码?

谢谢!

4

2 回答 2

1
use List::Util qw( max );

my @a = (1, 2, 3, 1, 1, 1, 1, 7, 1, 4, 1, 1, 1);

my %counts;
++$counts{$_} for @a;

my @counts = map $counts{$_} // 0, 1..max(keys(%counts));
于 2012-08-30T23:40:00.797 回答
0

容易地:

my @counts = map { $_ || 0 } @hash{ 1 .. 7 };

我们使用从 1 到 7 的数字对散列进行切片。 undef对于没有对应值的键返回,因此map将所有 Boolean-false 值变为零。

于 2012-08-30T23:40:51.890 回答