我怎么可以看到,如果一个Perl的哈希值已经具备了一定的关键?(How can I see if a

2019-06-23 10:33发布

我有一个计算在文本文件中的各种串出现的次数一个Perl脚本。 我希望能够检查,如果某些字符串尚未哈希的关键。 有没有完全这样做的更好的办法?

下面是我在做什么:

foreach $line (@lines){
    if(($line =~ m|my regex|) )
    {
        $string = $1;
        if ($string is not a key in %strings) # "strings" is an associative array
        {
            $strings{$string} = 1;
        }
        else
        {
            $n = ($strings{$string});
            $strings{$string} = $n +1;
        }
    }
}

Answer 1:

我相信,以检查是否有钥匙,你只是做一个哈希存在

if (exists $strings{$string}) {
    ...
} else {
    ...
}


Answer 2:

我会反对使用律师if ($hash{$key})因为它不会做你所期望的,如果键存在,但它的价值是零或空。



Answer 3:

那么,你的整个代码可以不限于:

foreach $line (@lines){
        $strings{$1}++ if $line =~ m|my regex|;
}

如果该值不存在,++操作者将假定它为0(和然后递增到1)。 如果它已经存在 - 它只会递增。



Answer 4:

我想,这个代码应该回答你的问题:

use strict;
use warnings;

my @keys = qw/one two three two/;
my %hash;
for my $key (@keys)
{
    $hash{$key}++;
}

for my $key (keys %hash)
{
   print "$key: ", $hash{$key}, "\n";
}

输出:

three: 1
one: 1
two: 2

迭代可以简化为:

$hash{$_}++ for (@keys);

(见$_在perlvar )。你甚至可以写出这样的事情:

$hash{$_}++ or print "Found new value: $_.\n" for (@keys);

其中每个键第一次它的发现报告。



Answer 5:

你可以去:

if(!$strings{$string}) ....


文章来源: How can I see if a Perl hash already has a certain key?