Perl Hash麻烦

Pad*_*wan 1 arrays perl hash

Perl大师很容易...

我想要一个简单地接受项目数组(实际上是多个数组)的函数,并计算散列的关键部分中的每个项目的次数.但是,我真的不确定Perl哈希.

@array = qw/banana apple orange apple orange apple pear/
Run Code Online (Sandbox Code Playgroud)

我读到你需要使用这样的代码来做数组:

my %hash = (
    'banana' => 0,
    'orange' => 0,
    'apple' => 0
    #I intentionally left out pear... I only want the values in the array...
);
Run Code Online (Sandbox Code Playgroud)

但是,我正在努力获得一个循环工作,可以通过并添加一个值,相应的键等于数组中每个项目的值.

foreach $fruit (@array) {
    if ($_ #is equal to a key in the hash) {
        #Add one to the corresponding value
    }
}
Run Code Online (Sandbox Code Playgroud)

这有几个基本功能全部包含在一起,所以代表所有刚开始的Perl程序员,提前谢谢!

Bor*_*din 6

所有你需要的是

my @array = qw/banana apple orange apple orange apple pear/;
my %counts;
++$counts{$_} for @array;
Run Code Online (Sandbox Code Playgroud)

这导致像哈希一样

my %counts = ( apple => 3, banana => 1, orange => 2, pear => 1 )
Run Code Online (Sandbox Code Playgroud)

for循环可以用块和一个明确的循环计数变量被写,如果你愿意的话,像这样

for my $word (@array) {
  ++$counts{$word};
}
Run Code Online (Sandbox Code Playgroud)

具有完全相同的效果.