首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >检查Perl散列键是否为真或是否存在更好?

检查Perl散列键是否为真或是否存在更好?
EN

Stack Overflow用户
提问于 2009-09-02 23:42:26
回答 5查看 7.6K关注 0票数 15

当分配给仅包含键的散列(实际上并不需要这些值)时,更可取的方法是:

代码语言:javascript
复制
$hash{$new_key} = "";

或者说:

代码语言:javascript
复制
$hash{$new_key} = 1;

一种要求您使用exists检查密钥,另一种允许您这样做:

代码语言:javascript
复制
if (exists $hash{$some_key})

代码语言:javascript
复制
if ($hash{$some_key})

我认为分配一个1会更好,但是这样做有什么问题吗?这有什么关系吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-09-02 23:51:36

这取决于您是需要密钥才能存在,还是需要有一个真值。测试你所需要的东西。如果您只是使用散列来查看某个内容是否在列表中,则可以使用exists()。如果您正在执行其他操作,则检查该值可能是可行的。

票数 16
EN

Stack Overflow用户

发布于 2009-09-03 00:01:03

当不需要这些值时,你会经常看到这个成语:

代码语言:javascript
复制
my %exists;
$exists{$_}++ for @list;

其效果是将其设置为1。

票数 11
EN

Stack Overflow用户

发布于 2009-09-02 23:59:03

假设您确实需要检查键的存在,但是您编写了检查真实性的代码。它会在不同的地方检查整个程序的真实性。然后突然发现您误解了什么,您应该实际存储从键到字符串值的映射;字符串应该在与您已经实现的相同数据流中使用。

字符串可以为空!

因此,您应该重构您的程序或创建另一个散列,因为真值检查不再检查是否存在。如果你从一开始就检查它的存在,这种情况就不会发生。

(编辑,因为不知道为什么被投票否决。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1370735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档