检查散列中是否已经存在随机生成的值

问题描述:

如果我有一个Perl散列,并且我随机生成了一个数值,那么如何让我的代码检查随机生成的值是否已经存在于散列中?检查散列中是否已经存在随机生成的值

+2

(谷歌是在这里你的朋友,这是你可以很容易地抬起头来为自己的东西一个很好的例子。) – Mort

+1

@Mort我会说,但对于新人来说,这并不容易找到。 “价值”和“存在”确实很容易,但“反向”技巧并不那么简单。 – simbabque

使用exists built-in

要检查钥匙:

my %foo = (bar => 1); 
if (exists $foo{foo}) { 
    print "key foo exists"; 
} 
if (exists $foo{bar}) { 
    print "key bar exists"; 
} 

这段代码打印

key bar exists 

要检查值,您需要先reverse哈希值。记住哈希是列表,所以如果它们颠倒了,所有的键都成为值。如果某个值存在的次数已超过一次,那么您可能会获得一些数据,但如果您想知道的只是某个值是否存在,那就没有关系。

my %foo = (bar => 1, baz => 2, qrr => 1); 
my %reversed = reverse %foo; 
if (exists $reversed{1}) { 
    print "value 1 exists"; 
} 
if (exists $reversed{3}) { 
    print "value 3 exists"; 
} 

这将打印

value 1 exists 
+2

*“您* ***可能会丢失一些数据”*!如果'%reverse'只使用一次,那么使用'List :: Util :: any {$ _ == 3}值%foo'可能会更快 – Borodin