在我看來,hash
和set
之間的唯一真正區別在於它們沒有密鑰。還有其他重要的區別嗎?set和hash之間的區別?
1
A
回答
2
並非所有散列都是集合,但散列可以用作集合。
集是集合其中的值...
- 無序
- 獨特
只有鑰匙哈希匹配,所以集通常作爲僅有鍵的哈希。這些鍵用作集合中的值,因此可以快速查找並遍歷它們。
在Perl中,將一個列表放入一個散列以重複刪除它並將其作爲一個集合使用是很常見的。
my %set = map { $_ => 1 } @values;
Ruby的Set類是散列的薄包裝。例如,這裏是Set#add。
# File set.rb, line 312
def add(o)
@hash[o] = true
self
end
如果你想檢查集合中是否有東西,只要檢查它是否在散列中,一個O(1)查找。
# File set.rb, line 214
def include?(o)
@hash[o]
end
大多數設置操作,如交叉點和聯合都非常快。交集只是檢查一個散列中的任何密鑰是否在另一箇中,一個O(n)操作(不考慮關鍵衝突)。這是Ruby如何做的。
def intersect?(set)
set.is_a?(Set) or raise ArgumentError, "value must be a set"
if size < set.size
any? { |o| set.include?(o) }
else
set.any? { |o| include?(o) }
end
end
聯合將兩個散列組合成一個新的散列,也是一個O(n)操作。
def |(enum)
dup.merge(enum)
end
+0
我對你在最後一行文本中對「哈希」的引用感到困惑。 –
相關問題
- 1. set-cookie2和set-cookie之間的區別
- 2. add_compile_options和SET之間的區別(CMAKE_CXX_FLAGS ...)
- 3. define,let和set之間的區別!
- 4. psql中set,\ set和\ pset之間的區別
- 5. Ruby的哈希和ActiveSupport的Hash之間的區別WithIndifferentAccess
- 6. 在Perl中,if(%hash)和if(定義的%hash)之間有什麼區別?
- 7. mootools中的.innerHTML和.set('html','')之間的區別是什麼?
- 8. let *和set之間的區別?在Common Lisp
- 9. '+ ='和'= +'之間的區別?
- 10. {!!之間的區別!!}和{{}}
- 11. ==和case之間的區別?
- 12. '#','%'和'$'之間的區別
- 13. | =和^ = css之間的區別
- 14. 「%〜dp0」和「。\」之間的區別?
- 15. .eq之間的區別。和==
- 16. ==和.equals()之間的區別?
- 17. `%in%`和`==`之間的區別
- 18. SPFile和PublishingPage類別之間的區別
- 19. System.Timers.Timer Enabled = true和.Start()之間的區別Enabled = true和.Start()之間的區別
- 20. NSthread和NStimer和NSNotifcation之間的區別?
- 21. Java和C#和.NET之間的區別
- 22. sys.log()和console.log()和console.error()之間的區別?
- 23. $ .ajax()和$ .get()和$ .load()之間的區別
- 24. 「git reset --hard hash」和「git checkout hash」有區別嗎?
- 25. javascript中的/ * * /和//之間的區別
- 26. python中的[]和[,,]之間的區別
- 27. QWidget的setStyleSheet和QApplication之間的區別
- 28. CKeditor的getHtml()和getData()之間的區別
- 29. make中的「$(shell ...)」和「$$(...)」之間的區別
- 30. C中的/ +和+之間的區別?
那麼,集沒有__values__。他們只有鑰匙:)(內部,紅寶石套裝是用哈希實現的) –
嗯,它意味着很多不同...請更具體。 – Gabriel