perl - 为什么将 '1' 映射到 perl 中的散列?

标签 perl hash mapping

我有一些这样的代码:

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 映射的任何想法?

最佳答案

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

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

因此,当您将散列用作 map 的参数时,您创建了以下列表:

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

因为 map 看见了

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

因为它是列表参数。

关于perl - 为什么将 '1' 映射到 perl 中的散列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12748048/

相关文章:

map - Wifi三角剖分

perl - 如何在 Perl 中构建和解析 HTTP URL/URI/路径?

perl - 这段 Perl 代码有什么作用?

security - 如何将密码迁移到不同的散列方法

ruby - 为什么我不能使用新的 Ruby 1.9.2 哈希语法将整数用作键?

ios - Restkit映射动态键值

eclipse - 如何格式化perl代码?

apache - 无法使用 mpirun 使 apache mod_perl 工作

hash - 从任何虚拟机(例如 virtualbox)通过其接口(interface)启动 vagrant box

java - 是否可以在不定义任何关联的情况下映射实体中的字段?