Ruby Set 类:集合相等

2024-04-10

根据 Ruby Set 类的文档,“== 如果两个集合相等,则返回 true。每对元素的相等性是根据 Object#eql? 定义的。

其本质可以使用 Date 对象来演示,其中包含不同 Date 对象但具有相同日期的集合比较相等:

require 'set'
d1 = Date.today              # => Thu, 30 Sep 2010
puts d1.object_id            # => 2211539680
d2 = Date.today + 1          # => Fri, 01 Oct 2010
puts d2.object_id            # => 2211522320
set1 = Set.new([d1, d2])

d11 = Date.today             # => Thu, 30 Sep 2010
puts d11.object_id           # => 2211489080
d12 = Date.today + 1         # => Fri, 01 Oct 2010
puts d12.object_id           # => 2211469380
set2 = Set.new([d12, d11])

set1 == set2                 # => true

但是使用我自己的对象,我在哪里编码了 eql?方法只比较某些属性,我无法让它工作。

class IpDet

    attr_reader :ip, :gateway

    def initialize(ip, gateway, netmask, reverse)
        @ip = ip
        @gateway = gateway
        @netmask = netmask
        @reverse = reverse
    end

    def eql?(other)
        if @ip = other.ip && @gateway == other.gateway
            return true
        else
            return false
        end
    end
end



ipdet1 = IpDet.new(123456, 123457, 123458, 'example.com')
ipdet2 = IpDet.new(234567, 2345699, 123458, 'nil')

ipdet11 = IpDet.new(123456, 123457, 777777, 'other_domain.com')
ipdet12 = IpDet.new(234567, 2345699, 777777, 'example.com')

puts "ipdet1 is equal to ipdet11: #{ipdet1.eql?(ipdet11)}"
puts "ipdet2 is equal to ipdet12: #{ipdet2.eql?(ipdet12)}"


set1 = Set.new([ipdet1, ipdet2])
set2 = Set.new([ipdet11, ipdet12])

puts "set 1 is equal to set2: #{set1 == set2}"

我从上面得到的输出是:

ipdet1 is equal to ipdet11: true
ipdet2 is equal to ipdet12: true
set 1 is equal to set2: false

有人有什么想法吗?


当你覆盖eql?,你也总是需要覆盖hash这样如果o1.eql?(o2)是真的,o1.hash == o2.hash也是如此。

例如,您的哈希方法可能如下所示:

def hash
  [@ip, @gateway].hash
end

你的还有一个错字eql?方法:@ip = other.ip应该@ip == other.ip.

还有一个小风格注释:if condition then true else false end相当于只是condition,所以你的eql?方法可以定义为

def eql?(other)
  @ip == other.ip && @gateway == other.gateway
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby Set 类:集合相等 的相关文章

  • 如何在 rake 任务中强制使用 RAILS_ENV?

    我有这个小耙子任务 namespace db do namespace test do task reset do ENV RAILS ENV test Rake Task db drop invoke Rake Task db creat
  • Ruby 试图掌握一种新的表示法。 (inject(:) 与 select(and:even?);为什么有 &?)

    所以 我刚刚了解到 而不是写这样的东西 1 2 3 4 5 inject x y x y gt 15 我可以写 1 2 3 4 5 inject gt 15 我还了解到 而不是写 1 2 3 4 5 select x x even gt 2
  • 手写签名对比

    有谁知道java中一种将手写文本样本 例如签名 亲笔签名等 与一个或多个样本进行比较的方法 最好是开源的 你可以看看这个OCR小程序 http www heatonresearch com articles 42 page1 html
  • 输出到控制台,同时保留 ruby​​ 中的用户输入

    我有一个 ruby 脚本 它同时异步接收和显示来自服务器的消息 并允许用户在控制台上输入 当收到消息时 当前正在将其写入用户正在键入的内容的中间 输入本身并没有乱码 但看起来很糟糕 理想情况下 它将保存用户当前的输入 输出消息 然后在下一行
  • close 似乎不适用于 WebSocket

    我有这个简单的 JavaScript 代码 window ws new WebSocket ws 127 0 0 1 8000 ws onopen function ws send hello Ruby 中的服务器如下所示 require
  • Ruby:如何计算相对于另一条路径的路径?

    假设我知道我开始的绝对路径和我试图到达的绝对路径 first first path second second path 现在我想弄清楚如何构建一条相对于第一个路径 例如 answer should be first path second
  • 如何使用 watir 滚动网页

    我正在尝试滚动网页以查找并单击页面滚动时延迟加载的内容 我正在使用以下命令 require watir webdriver browser Watir new firefox browser send keys space 我在 Firef
  • 如何遍历任意给定集合中的枚举?

    我有很多枚举类型 它们与相应的集合相结合 例如 type TMyEnum meOne meTwo meThree TMyEnums set of TMyEnum 我正在尝试提出一组可以运行的函数any枚举集 而不是为每个枚举编写单独的函数
  • Ruby:在 Ubuntu 上安装 rmagick

    我正在尝试在 Ubuntu 10 04 上安装 RMagick 看起来here https stackoverflow com questions 1482823 is there an easy way to install rmagic
  • 对于 IEEE754 NaN 值,所有比较都返回 false 的基本原理是什么?

    为什么 NaN 值的比较行为与所有其他值不同 也就是说 与运算符 进行的所有比较 其中一个或两个值为 NaN 都会返回 false 这与所有其他值的行为相反 我想这在某种程度上简化了数值计算 但我找不到明确说明的原因 即使在关于 IEEE
  • 方法调用中是否有记忆约定?

    我想避免在方法调用中重新评估值 直到现在 我一直在这样做 def some method some method begin lot s of code end end 但它最终变得非常丑陋 在一些代码中 我看到类似以下内容 def som
  • 在任意时间范围内找到最佳日/月/年间隔的算法?

    如果您有时间表 请说 March 19 2009 July 15 2011 是否有一种算法可以将该时间范围分解为 March 19 2009 March 31 2009 complete days April 1 2009 December
  • ruby 的 String .hash 方法如何工作?

    我只是红宝石的新手 我见过一个字符串方法 String hash 例如 在irb 我试过了 gt gt mgpyone hash returns gt 144611910 这个方法是如何工作的 The hash方法是为所有对象定义的 看文档
  • 带有附加参数的redirect_to

    我是一个菜鸟 redirect to users url notice Succeed p p 然后我添加一个message它失败了 redirect to users url notice Succeed message test p p
  • 在 Objective-C 中比较 2 个字符串

    我写了以下代码 if depSelectedIndice gt 1 comSelectedIndice gt 1 NSLog depart elemet d depSelectedIndice NSLog depart elemet d c
  • 如何在 gem 的示例脚本中使用 pry-byebug ?

    我正在制作我的第一个 gem 它不是 Rails 应用程序 而是一个带有一些 AI 的 tic tac toe 库 这样我就可以与一个永远不会输的计算机对手比赛 并在可能的情况下强行获胜 现在我正在尝试调试人工智能中的攻击策略 但我似乎无法
  • 将 ruby​​ 类转换为模块比使用改进更好的方法?

    Module refine http ruby doc org core 2 0 0 Module html method i refine方法接受一个类和一个块并返回一个细化模块 所以我想我可以定义 class Class def inc
  • 比较两个文本文件的最快方法是什么,不将移动的行视为不同

    我有两个文件非常大 每个文件有 50000 行 我需要比较这两个文件并识别更改 然而 问题是如果一条线出现在不同的位置 它不应该显示为不同的 例如 考虑这个文件A txt xxxxx yyyyy zzzzz 文件B txt zzzzz xx
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • python 集合可以包含的值的数量是否有限制?

    我正在尝试使用 python 设置作为 mysql 表中 ids 的过滤器 python集存储了所有要过滤的id 现在大约有30000个 这个数字会随着时间的推移慢慢增长 我担心python集的最大容量 它可以包含的元素数量有限制吗 您最大

随机推荐

  • 如何在运行时创建 celery 队列,以便工作人员拾取发送到该队列的任务?

    我正在使用 django 1 4 celery 3 0 rabbitmq 为了描述该问题 我的系统中有许多内容网络 并且我需要一个队列来处理与每个网络相关的任务 然而 内容是在系统运行时动态创建的 因此我需要动态创建队列并让现有工作人员开始
  • CSS 变量中的 CSS calc() 行为

    我对使用 calc 设置 CSS 变量的行为感到好奇 Example test halfWidth calc 100 2 现在 如果 test元素 比如说div 宽 500px 我想要 halfWidth变量设置为 250px 但是 据我所
  • 急切地处置 ManualResetEvent

    我有一个类 它允许其他线程等待 直到它使用 a 完成操作ManualResetEventSlim 操作通常很简短 这个类没有明确的生命周期 因此没有一个地方可以轻松关闭该事件 相反 我想在事件完成后立即关闭该事件 一旦收到信号 并且在任何等
  • 在 Android 中滚动 listView 时选定的列表项颜色会移动

    在我的 Android 应用程序中 我使用列表视图 列表视图的代码如下
  • 在Python中将文本输出到多个终端

    我使用Python和ArchLinux 我正在用 Python 编写一个简单的人工智能作为学校项目 因为这是一个学校项目 并且我想清楚地演示它在做什么 所以我的目的是有一个不同的终端窗口来显示每个子进程的打印输出 一个终端显示句子如何被解析
  • 将画布设置为背景 - Javascript [重复]

    这个问题在这里已经有答案了 我试图弄清楚如何将我创建的画布转换为 HTML 正文的背景图像 谢谢
  • 如何使用样条线绘制 Cox 风险模型

    我有以下模型 coxph Surv fulength mortality 1 pspline predictor 其中 fulength 是随访时间 包括死亡率 predictor 是死亡率的预测因子 上面命令的输出是这样的 coef se
  • R 直方图中的确切箱数

    我在 R 中制作直方图时遇到困难 问题是我告诉它制作 5 个容器 但它制作了 4 个 我告诉它制作 5 个 它制作了 8 个 data lt c 5 28 14 64 37 25 78 9 44 92 8 96 19 22 34 81 33
  • Excel:列出 2 个数字之间的数字

    我想知道是否有人知道列出 2 个值之间的所有数字的公式 例如 如果单元格 F2 中有 12 而 G2 中有 17 我想要一个显示 13 14 15 16 的公式在单元格 H2 中 Thanks 使用 Excel 工作表函数无法完成此操作 为
  • SQL Server 2000 相当于 ON DUPLICATE KEY?

    SQL Server 2000 是否有与 MySQL ON DUPLICATE KEY 子句等效的功能 这个答案 https stackoverflow com questions 1197733 does sql server offer
  • CoreData 获取关系计数和按另一个关系分组的请求 (m2n)

    在我的 CoreData 模型中 我有一个使用中间实体建模的 n2n 关系 Person 1 lt Person2Appointment gt 1 Appointment The Person2Appointment实体看起来像这样 int
  • 如何使用 AJAX 渲染部分内容?拉拉维尔 5.2

    我现在的情况是想列出有关存储在 MYSQL 数据库中的停车位的信息 我正在使用 AJAX 调用 API 端点 api spots 并返回景点列表 我使用刀片语法创建了一个部分视图来布局信息 partials Spot blade php 我
  • EPPlus 阅读列标题

    有没有一种简单的方法可以告诉 EPPlus 一行是标题 或者我应该通过使用 SelectedRange 指定范围来创建标题 将其从工作表中删除并迭代保留的单元格 我最终这样做了 class Program static void Main
  • 在MVC视图层从DATASET中提取数据

    我被告知在 MVC 中使用旧的传统 SQL 方式 因此创建了登录注册页面 但现在的问题是我无法从数据集中将数据返回到 VIEW Model public ConnectionStatus Login db String email Stri
  • 如何使用带有嵌套结构和最少代码更改的 boost::serialization ?

    目前我们使用存储在嵌套结构中的 POD 例子 define MaxNum1 100 define MaxNum2 50 struct A int Value MaxNum1 char SomeChar a struct B A data M
  • 学说2:如何在不丢失数据的情况下将一对多转换为多对多

    在我的应用程序中 我想将一对多转换为多对多而不丢失数据 from ORM ManyToOne targetEntity AppBundle Entity FoodAnalytics Recipe inversedBy medias ORM
  • 映射 id 的有效方法

    我有两个文本文件 文件 1 的数据如下 用户游戏数 A Rugby 2 A Football 2 B Volleyball 1 C TT 2 File 2 1 Basketball 2 Football 3 Rugby 90 TT 91 V
  • MySQL 和 Solr 中的分面搜索和类别

    我希望能够创建一个类似于 ebay 或 newegg 的搜索页面 您可以在其中选择类别和根据类别的不同方面 有人能给我指出正确的方向吗 我如何使用 Solr 中的产品存储和搜索此类方面和类别 以及我将使用 MySQL 查看哪种类型的数据库模
  • iOS 启动设置 -> 限制 URL 方案

    我最近发现了一个很棒的iOS5自定义设置URL方案 这可以在这个伟大的website http handleopenurl com scheme apple settings app 我发现这很有效 将用户从我的应用程序引导到 设置 应用程
  • Ruby Set 类:集合相等

    根据 Ruby Set 类的文档 如果两个集合相等 则返回 true 每对元素的相等性是根据 Object eql 定义的 其本质可以使用 Date 对象来演示 其中包含不同 Date 对象但具有相同日期的集合比较相等 require se