如果数组中存在键,我想从哈希中打印该键及其值。这是我写的代码。
for($i=0;$i<@array.length;$i++)
{
if (exists $hash{$array[$i]})
{
print OUTPUT $array[$i],"\n";
}
}
从上面的代码中,我可以打印密钥。但我不确定如何打印该键的值。
有人能帮我吗?
谢谢
@array.length
在语法上是合法的,但绝对不是你想要的。
@array
,在标量上下文中,为您提供数组中元素的数量。
该length
函数不带参数,为您提供$_
.
.
运算符执行字符串连接。
所以@array.length
取 中的元素个数@array
和 中包含的字符串的长度$_
,将它们视为字符串,并将它们连接在一起。 $i < ...
强加了一个数字上下文,所以它很可能被视为一个数字——但肯定不是你想要的。(如果@array
有 15 个元素并且$_
恰好是 7 个字符长,则数字应该是157
,一个无意义的值。)
计算其中元素数量的正确方法@array
只是@array
在标量上下文中 - 或者,更明确地说,scalar @array
.
要回答您的问题,如果$array[$i]
是key ,则对应的值为$hash{$array[$i]}
。
但是 C 风格的for
循环并不是遍历数组的最简洁方式,尤其是在每次迭代只需要值而不是索引的情况下。
foreach my $elem (@array) {
if (exists $hash{$elem}) {
print OUTPUT "$elem\n";
}
}
使用哈希切片的一些替代方法:
foreach (@hash{@array}) { print OUTPUT "$_\n" if defined };
print OUTPUT join("\n",grep {defined} @hash{@array});
(对于那些喜欢打高尔夫球的人)。