当分配给仅包含键的散列(实际上并不需要这些值)时,更可取的方法是:
$hash{$new_key} = "";
或者说:
$hash{$new_key} = 1;
一种要求您使用exists
检查密钥,另一种允许您这样做:
if (exists $hash{$some_key})
或
if ($hash{$some_key})
我认为分配一个1会更好,但是这样做有什么问题吗?这有什么关系吗?
发布于 2009-09-02 23:51:36
这取决于您是需要密钥才能存在,还是需要有一个真值。测试你所需要的东西。如果您只是使用散列来查看某个内容是否在列表中,则可以使用exists()。如果您正在执行其他操作,则检查该值可能是可行的。
发布于 2009-09-03 00:01:03
当不需要这些值时,你会经常看到这个成语:
my %exists;
$exists{$_}++ for @list;
其效果是将其设置为1。
发布于 2009-09-02 23:59:03
假设您确实需要检查键的存在,但是您编写了检查真实性的代码。它会在不同的地方检查整个程序的真实性。然后突然发现您误解了什么,您应该实际存储从键到字符串值的映射;字符串应该在与您已经实现的相同数据流中使用。
字符串可以为空!
因此,您应该重构您的程序或创建另一个散列,因为真值检查不再检查是否存在。如果你从一开始就检查它的存在,这种情况就不会发生。
(编辑,因为不知道为什么被投票否决。)
https://stackoverflow.com/questions/1370735
复制相似问题