[英]Which data structure should I use for a hash without values?
我需要檢查一組標量中是否存在標量。 存儲這組標量的最佳方法是什么?
遍歷數組會產生線性檢查時間。 散列的檢查時間是不變的,但是由於我不使用散列的值部分,因此感覺效率低下。
使用哈希值,但不要使用值。 真的沒有更好的方法。
使用哈希來測試集合成員資格的內存開銷很小,並且大大超過了通過數組重復順序搜索的成本。 有很多方法可以創建一個集合成員資格樣式哈希:
my %set = map {$_ => 1} ...;
my %set; $set{$_}++ for ...;
my %set; @set{...} = (1) x num_of_items;
這些中的每一個都允許您直接在條件中使用哈希查找,而無需任何其他語法。
如果您的哈希值很大,並且您擔心內存使用情況,則可以將undef
存儲為每個鍵的值。 但在這種情況下,你必須在條件中使用exists $set{...}
。
哈希應該沒問題。 您可以使用undef作為值並使用exists($h{$k})
或者您可以使用1
並使用$h{$k}
。
Judy :: HS應該更有效率,但也沒有該結構的無價值版本。
您可能會發現FAQ的這一部分很有用:
迭代數組可以完成:
my @arr = ( $list, $of, $scalars );
push @arr, $any, $other, $ones;
通過查看是昂貴的,但除非你有一個龐大的列表,否則不是那么昂貴:
grep { $_ eq $what_youre_looking_for } @arr;
哈希方法也有效:
my %hash = ( $list => 1, $of => 1, $scalars => 1 );
$hash{$another} = 1;
if ( exists $hash{$what_youre_looking_for} ) {
...
}
您可以實現二進制搜索和列表排序,但這些是最常用的兩種方法。
HashTable是最好的選擇。
注意: - 正如你所說的那樣,我希望沒有重復的元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.