如何为包含可比类的类定义哈希函数?

帕迪91

想象一个包括类似的类:

class Element
  include Comparable
  attr_accessor :name, :pos_x, :pos_y

  def initialize(name, pos_x, pos_y)
    @name = name
    @pos_x = pos_x
    @pos_y = pos_y
  end

  def <=>(other)
    if (@pos_x == other.pos_x) and (@pos_y == other.pos_y)
      return 0
    else 
      return @name <=> other.name
    end
  end

  def eql?(other)
    self == other
  end
end

在这种情况下hash您将如何实现该功能a.hash == b.hash一般来说,我会这样做:

def hash
  @name.hash
end

但这不包括pos_xpos_y

BroiSatse

不幸的是,在这种情况下,从数学上讲不可能定义有效的哈希函数。

设a,b为两个位置相等且名称不同的元素。根据eql?定义,这意味着h(a) == h(b)由于对于任何名称值都是如此,因此哈希函数将独立于名称属性,但这与第二次检查是矛盾的。因此,此eql?定义没有哈希函数抱歉。:(

更新:

如toro2k所述-您的相等性定义不是可传递的。通常,如果a == b和b == c,则要求a == c。根据您的eql?功能:

{pos_x: 1, pos_y: 1, name: 'a'} == {pos_x: 1, pos_y: 1, name: 'b'}
{pos_x: 1, pos_y: 1, name: 'b'} == {pos_x: 2, pos_y: 2, name: 'b'}

{pos_x: 1, pos_y: 1, name: 'a'} != {pos_x: 2, pos_y: 2, name: 'b'}

这就是您问题的根源。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何为用户定义的类实现c ++ 11 move函数?

来自分类Dev

如何为扩展Date的类定义构造函数?

来自分类Dev

如何为类级别的typedef函数创建定义

来自分类Dev

如何在类对象属性的哈希表上使用可比对象

来自分类Dev

类哈希函数

来自分类Dev

如何为R中定义的S4类定义函数match和%in%的行为?

来自分类Dev

如何为子标签定义类?

来自分类Dev

Haskell:如何为构造函数定义构造函数类Foldable的实例

来自分类Dev

如何为聚类指定距离函数?

来自分类Dev

如何为全局类调用特定函数?

来自分类Dev

如何在C ++中制作可比类

来自分类Dev

如何在C ++中制作可比类

来自分类Dev

如何为自己的用户定义类覆盖可变参数函数中用于kwarg的`**`运算符?

来自分类Dev

如何迭代包含dto类作为键值的哈希图?

来自分类Dev

如何在类中包含函数属性?

来自分类Dev

定义包含的类

来自分类Dev

如何通过包含相应的.h文件从.cpp中获得函数/类定义?

来自分类Dev

如何从类内部调用在类外部定义的函数

来自分类Dev

可比类等于函数对私有变量起作用吗?

来自分类Dev

如何为表定义类以控制表行的样式

来自分类Dev

如何为Yii字段指定自定义CSS类?

来自分类Dev

如何为用户定义的类型实现Eq类型类?

来自分类Dev

如何为C#Windows窗体定义窗口类名称?

来自分类Dev

如何为ID中的类自定义CSS

来自分类Dev

如何为类内封装属性定义导航?

来自分类Dev

如何为已定义的类解决Flask中的NameError

来自分类Dev

如何为自定义类的参数指定类型提示?

来自分类Dev

如何为 UIPageViewControllerDelegate 制作自定义类?

来自分类Dev

如何为包装需要2个参数的ac函数的unique_ptr类成员创建自定义删除器?

Related 相关文章

  1. 1

    如何为用户定义的类实现c ++ 11 move函数?

  2. 2

    如何为扩展Date的类定义构造函数?

  3. 3

    如何为类级别的typedef函数创建定义

  4. 4

    如何在类对象属性的哈希表上使用可比对象

  5. 5

    类哈希函数

  6. 6

    如何为R中定义的S4类定义函数match和%in%的行为?

  7. 7

    如何为子标签定义类?

  8. 8

    Haskell:如何为构造函数定义构造函数类Foldable的实例

  9. 9

    如何为聚类指定距离函数?

  10. 10

    如何为全局类调用特定函数?

  11. 11

    如何在C ++中制作可比类

  12. 12

    如何在C ++中制作可比类

  13. 13

    如何为自己的用户定义类覆盖可变参数函数中用于kwarg的`**`运算符?

  14. 14

    如何迭代包含dto类作为键值的哈希图?

  15. 15

    如何在类中包含函数属性?

  16. 16

    定义包含的类

  17. 17

    如何通过包含相应的.h文件从.cpp中获得函数/类定义?

  18. 18

    如何从类内部调用在类外部定义的函数

  19. 19

    可比类等于函数对私有变量起作用吗?

  20. 20

    如何为表定义类以控制表行的样式

  21. 21

    如何为Yii字段指定自定义CSS类?

  22. 22

    如何为用户定义的类型实现Eq类型类?

  23. 23

    如何为C#Windows窗体定义窗口类名称?

  24. 24

    如何为ID中的类自定义CSS

  25. 25

    如何为类内封装属性定义导航?

  26. 26

    如何为已定义的类解决Flask中的NameError

  27. 27

    如何为自定义类的参数指定类型提示?

  28. 28

    如何为 UIPageViewControllerDelegate 制作自定义类?

  29. 29

    如何为包装需要2个参数的ac函数的unique_ptr类成员创建自定义删除器?

热门标签

归档