哈希可以有重复的键或值吗?
答案 0 :(得分:15)
它可以有重复的值而不是键。
答案 1 :(得分:9)
对于散列和数组,只能在给定键上存储一个标量。 (“键是唯一的。”)如果不是,你就做不到了
$h{a} = 1;
$h{a} = 2;
$val = $h{a}; # 2
$a[4] = 1;
$a[4] = 2;
$val = $a[4]; # 2
如果要将多个值与键关联,可以在该键上放置对数组(或散列)的引用,并将值添加到该数组(或散列)。
for my $n (4,5,6,10) {
if ($n % 2) {
push @{ $nums{odd} }, $n;
} else {
push @{ $nums{even} }, $n;
}
}
say join ', ', @{ $nums{even} };
有关详情,请参阅perllol。
对于值,多个元素在哈希和数组中都可以具有相同的值。
$counts{a} = 3;
$counts{b} = 3;
$counts[5] = 3;
$counts[6] = 3;
答案 2 :(得分:5)
假设谈论“%hash”
然后:
这很容易理解,因为它是特定键到特定值的映射,其中Value在查找中不起作用,因此独立于其他价值观。
答案 3 :(得分:1)
您可以尝试使用CPAN中的Hash::MultiKey模块。
(我使用Data :: Dumper来显示哈希的外观 - 这里没有必要)
use Data::Dumper;
use Hash::MultiKey;
tie my %multi_hash, 'Hash::MultiKey';
$multi_hash{['foo', 'foo', 'baz']} = "some_data";
for (keys %multi_hash) {
print @$_,"\n";
};
print Dumper\%multi_hash;
输出应该是():
foofoobaz
$VAR1 = {
'ARRAY(0x98b6978)' => 'some_data'
};
从技术上讲,Hash :: MultiKey允许您创建引用作为哈希键。
答案 4 :(得分:1)
请尝试运行此代码,它会毫无错误地执行。 我希望这就是你所要求的!
#!/usr/bin/perl
use strict;
use warnings;
my %hash = ('a' => 1, 'a' => 2, 'b' => 4 );
print values %hash, "\n\n";
print keys %hash, "\n\n";
答案 5 :(得分:0)
是的哈希可以有重复的密钥,如下所示......
关键示例:BirthDate | LastNameFirst4Chars | FirstNameInitial | IncNbr
" 1959年12月19日|威尔| K | 1" ......" 1959-12-19 |将| K | 74"。
注意:如果有人不记得他们的社会保障Nbr
#-- CODE SNIPPET:
@Offsets=(); #-- we will build an array of Flat File record "byte offsets" to random access
#-- for all records matching this ALT KEY with DUPS
for ($i=1; $i<=99; $i++) {
$KEY=$BirthDate . "|" . $LastNameFirst4Chars . "|" . $FirstNameInitial . "|" . $i;
if (exists $Hash{$KEY}) {
push @Offsets, $Hash{$KEY}; #-- add another hash VALUE to the end of the array
}
}