如何在Ruby中使对象示例成为散列键?

wz1wpwve  于 2023-08-04  发布在  Ruby
关注(0)|答案(2)|浏览(159)

我有一个Foo类,它有几个成员变量。当类的两个示例中的所有值都相等时,我希望对象“相等”。然后我希望这些对象成为我的哈希中的键。当我目前尝试这个时,哈希将每个示例视为不相等。

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

字符串
此时f1和f2应该相等。

  1. h[f1] = 7
  2. h[f2] = 8
  3. puts h[f1]


应打印8

q43xntqr

q43xntqr1#

参见Hash
哈希使用key.eql?来测试密钥是否相等。如果您需要使用自己的类的示例作为Hash中的键,建议您同时定义eql?hash方法。哈希方法必须具有a.eql?(b)隐含a.hash == b.hash的属性。
eql?方法很容易实现:return true如果所有成员变量都相同。对于hash方法,请使用[@data1, @data2].hash,正如Marc-Andre在评论中建议的那样。

6yoyoihd

6yoyoihd2#

在类中添加一个名为'hash'的方法:

  1. class Foo
  2. def hash
  3. return whatever_munge_of_instance_variables_you_like
  4. end
  5. end

字符串
这将按照您请求的方式工作,并且不会为不同但相同的对象生成不同的哈希键。

相关问题