Perl循环遍历单个元素的数组哈希

use*_*292 3 arrays perl hash loops

我有一个数组哈希,如图所示:

my %hash = (
  234 => ["aa", "bb", "aa", "ab", "aa"],
  235 => ["aa", "ab", "aa", "bb", "aa"],
  236 => ["bb", "aa", "aa", "aa", "bb"],
  ...
)
Run Code Online (Sandbox Code Playgroud)

我试图遍历每个值的第一个元素并计算出现的次数bb.

例如,在上面的哈希中,我bb对所有显示的第一个元素都有一个匹配项.我需要将该数字(所有数组的第0个元素中的"bb"的数量)推入一个新数组,然后移动到下一组元素.

对于上面的例子,我将循环遍历数组的所有4个元素并获得最终数组(1, 1, 0, 1, 1).

我在使用正确的代码时遇到了很多麻烦,但还没有找到类似的问题.任何帮助将非常感激.

cho*_*oba 5

一个简单的解决方案:迭代哈希值.对于每个值,迭代数组的成员,并在需要时将结果数组加1:

#!/usr/bin/perl
use warnings;
use strict;

my %hash = (234 => [qw/aa bb aa ab aa/],
            235 => [qw/aa ab aa bb aa/],
            236 => [qw/bb aa aa aa bb/],
           );

my @result;

for my $value (values %hash) {
    my $i = 0;
    for (@$value) {
        $result[$i++] += 'bb' eq $_;
    }
}

print "@result\n";
Run Code Online (Sandbox Code Playgroud)

  • @choroba:我刚学到的关于Perl的东西.我不希望`$ result [$ i ++] + ='bb'eq $ _`在没有运行时错误的情况下逃脱,但在`perlop`中找到了它.*关系运算符...返回1表示true和已定义空字符串的特殊版本"",计为零,但不受有关不正确数字转换的警告* (2认同)