我应该将哪种数据结构用于没有值的哈希?

Tim*_*Tim 2 perl hash data-structures

我需要检查一组标量中是否存在标量.存储这组标量的最佳方法是什么?

遍历数组会产生线性检查时间.散列的检查时间是不变的,但是由于我不使用散列的值部分,因此感觉效率低下.

yst*_*sth 9

使用哈希值,但不要使用值.真的没有更好的方法.


Eri*_*rom 5

使用散列测试集合成员资格的内存开销很小,并且大大超过了通过数组重复顺序搜索的成本.有很多方法可以创建一个集合成员资格样式哈希:

my %set = map {$_ => 1} ...;

my %set; $set{$_}++ for ...;

my %set; @set{...} = (1) x num_of_items;
Run Code Online (Sandbox Code Playgroud)

这些中的每一个都允许您直接在条件中使用哈希查找,而无需任何其他语法.

如果您的哈希值很大,并且您担心内存使用情况,则可以将其存储undef为每个键的值.但在这种情况下,你将不得不exists $set{...}在你的条件中使用.


ike*_*ami 5

哈希应该没问题.你可以使用undef作为值和使用,exists($h{$k})或者你可以使用1和使用$h{$k}.

Judy :: HS应该更有效率,但也没有该结构的无价值版本.