2

我有一些像这样的代码:

print "key $_ - $hJobT{$_}\n" foreach keys %hJobT;
%hJobT = map { $_ => 1 } %hJobT;
print "key $_ - $hJobT{$_}\n" foreach keys %hJobT;

当我运行程序并打印结果时,我得到:

key office - 1
key recon - 1
key office - 1
key 1 - 1
key recon - 1

前两个结果来自第一个打印语句并且是预期的。

key 1 - 1部分不是预期的。

澄清一下 - 代码在一个循环中,当它迭代时,键值在某些条件下会增加。出于测试目的,我在循环末尾放置了一个退出语句,因此它只显示第一次迭代结果,因此它们是“1”。(就好像我没有毫无意义地将 1 映射到 1。)关于为什么我得到 1-1 映射的任何想法?

4

1 回答 1

12

哈希是一个偶数列表。因此,在列表上下文中使用它时,您将获得所有这些键和值:

@list = qw(a b);
%hash = @list;   # valid!
@list = %hash;   # valid, but bad style. And the ordering may change

因此,当您将哈希用作 arg 时map,您创建了以下列表:

(
   office => 1,
   1      => 1,
   recon  => 1,
   1      => 1
)

因为map看到

("office", 1, "recon", 1)

因为它是列表参数。

于 2012-10-05T14:11:21.880 回答