簡體   English   中英

如何在Ruby中使對象實例成為哈希鍵?

[英]How to make object instance a hash key in Ruby?

我有一個Foo類,里面有一些成員變量。 當類的兩個實例中的所有值相等時,我希望對象“相等”。 然后,我想將這些對象作為哈希中的鍵。 當我目前嘗試這個時,哈希將每個實例視為不相等。

h = {}
f1 = Foo.new(a,b)
f2 = Foo.new(a,b)

此時f1和f2應該相等。

h[f1] = 7
h[f2] = 8
puts h[f1]

應該打印8

http://ruby-doc.org/core/classes/Hash.html

哈希使用key.eql? 測試密鑰是否相等。 如果您需要使用自己的類的實例作為Hash中的鍵,建議您同時定義eql? 和哈希方法。 哈希方法必須具有a.eql?(b)暗示a.hash == b.hash的屬性。

這個eql? 方法很容易實現:如果所有成員變量都相同,則返回true。 對於哈希方法,請使用[@ data1,@ data2] .hash,正如Marc-Andre在評論中所建議的那樣。

在您的類中添加一個名為'hash'的方法:

class Foo
  def hash
    return whatever_munge_of_instance_variables_you_like
  end
end

這將按照您請求的方式工作,並且不會為不同但相同的對象生成不同的哈希鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM