笛卡尔积红宝石

2024-01-13

class CartesianProduct
include Enumerable
# your code here
end
#Examples of use
c = CartesianProduct.new([:a,:b], [4,5])
c.each { |elt| puts elt.inspect }
# [:a, 4]
# [:a, 5]
# [:b, 4]
# [:b, 5]
c = CartesianProduct.new([:a,:b], [])
c.each { |elt| puts elt.inspect }
# (nothing printed since Cartesian product
# of anything with an empty collection is empty)

我是红宝石新手。我了解如何定义笛卡尔积的实例方法,但我对此一无所知。我应该如何构造类对象来满足要求。


我建议使用Array#product https://ruby-doc.org/core-2.4.0/Array.html#method-i-product.

[:a, :b].product [4,5]

这将产生您想要的输出。

irb(main):001:0> [:a, :b].product [4,5]
=> [[:a, 4], [:a, 5], [:b, 4], [:b, 5]]
irb(main):002:0> 

如果你想要一个惰性排列生成器,我之前写过类似的东西。但我警告你,如果你有大量的排列需要计算,可能需要一段时间。您应该能够从前 40 - 45 行中获取您需要的内容这个文件 https://github.com/rk/werd/blob/master/grammartest.rb(无论如何,这个文件是一个实验)。

诀窍是使用 Ruby 1.9.2 构建枚举器来处理数组的数组。因此,您首先构建一个将无限循环遍历数组的枚举器,并在数组的数组枚举器中跟踪第一个输出集,并在第二次命中时结束循环。这是我能够弄清楚如何终止这样的循环的唯一方法。

def infinite_iterator(array)
  Enumerator.new do |result|
    loop do
      array.cycle { |item| result << item }
    end
  end
end

def cartesian_iterator(data)
  Enumerator.new do |result|
    first = data.map { |p| p.next }
    result << first

    i = 1
    parts = first.dup
    loop do
      parts[2-i] = data[2-i].next
      break if parts == first

      result << parts.join
      i = ((i + 1) % parts.size)
    end
  end
end

array = [ infinite_iterator([:a,:b]), infinite_iterator([4,5]) ]
generator = cartesian_iterator(array)

generator.each { |a| p a }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

笛卡尔积红宝石 的相关文章

  • 如何找到 Ruby 应用程序中的性能瓶颈?

    我编写了一个 Ruby 应用程序 它可以解析来自不同格式 html xml 和 csv 文件的源的大量数据 如何找出代码的哪些区域花费时间最长 有没有关于如何提高 Ruby 应用程序性能的好资源 或者您是否有始终遵循的性能编码标准 例如 您
  • 如何使用 minitest 运行所有测试?

    我下载了一个项目的源代码 发现了一个错误并修复了它 现在我想运行测试来看看我是否破坏了任何东西 测试是在 minitest DSL 中进行的 我如何同时运行它们 我搜索了适用的 rake 任务等 但没有找到 这是一个链接耙子 测试任务 ht
  • sinatra 应用程序在运行时无法启动

    我使用的是 Ubuntu 10 10 Ruby 1 9 2 无论我做什么 我都无法在本地计算机上启动 sinatra 应用程序 你好 rb require sinatra get do Hello World end ruby hello
  • 如何将 STDOUT 捕获到字符串?

    puts hi puts bye 我想存储到目前为止代码的 STDOUT 在本例中 hi nbye 到变量中说 结果 并打印它 puts result 我这样做的原因是我已将 R 代码集成到我的 Ruby 代码中 当 R 代码运行时 其输出
  • 不将所需的文件包含到 vim 全方位补全中

    如果我尝试在具有 require xxx 语句的 Ruby 文件中自动完成 它会开始扫描所需的所有文件 以及所需文件所需的文件 它每次都会这样做 是否可以使 vim 自动完成功能不扫描所需文件或仅扫描特定路径中的文件 例如仅 app 以下之
  • 如何使用define_method创建类方法?

    如果您尝试以元编程方式创建类方法 这非常有用 def self create methods method name To create instance methods define method method name do end T
  • 在多个模型中与 has_many :through 建立关联

    请帮助了解该怎么做 project payments有这棵树 Project Stages Costs Payments 项目 rb has many stages has many costs through gt stages stag
  • mongoid 中的嵌入文档与哈希数据类型

    我找不到任何讨论此问题的博客文章或文档 它们 嵌入式文档和哈希数据类型 非常相似 彼此相比有何好处或限制 考虑我的架构设计 class HistoryTracker include Mongoid Document include Mong
  • YouTube 视频出现 Phantom JS 错误

    Phantom JS 版本 1 9 1 恶作剧版本 1 3 0 从今天开始 YouTube 嵌入视频在运行 javascript 测试时会出现 poltergeist 错误 我的 YouTube 代码只是默认的嵌入 YouTube 代码 这
  • Rails 上的 SASS 无效 CSS 错误

    我正在尝试使用http startbootstrap com stylish portfolio http startbootstrap com stylish portfolio但是 在我的 Rails 应用程序中 我在 vintage
  • 使用 PostgreSQL 的模式和 Rails 创建多租户应用程序

    我已经想通的事情 我正在学习如何在 Rails 中创建多租户应用程序 该应用程序根据用于查看应用程序的域或子域来提供来自不同模式的数据 我已经回答了一些问题 如何让 subdomain fu 也能与域一起使用 这是有人问了同样的问题 htt
  • 列“users.id”必须出现在 GROUP BY 子句中或在聚合函数中使用

    关系 Item belongs to Product Product belongs to User 项目型号范围 scope search gt search term select products name users product
  • 匹配一对未转义的平衡分隔符

    如何匹配一对不被反斜杠转义的平衡分隔符 本身不被反斜杠转义 无需考虑嵌套 例如 对于反引号 我尝试了此操作 但是转义的反引号无法按转义的方式工作 regex lt lt hello how are you gt 1 how expected
  • 如何访问“可以?”细胞内的方法?

    我在用着cancan and cells我的 ruby on rails 项目中的 gems 如何访问can 细胞内的方法 Thanks 我必须这样做 尝试 class MyCell lt Cell Rails include CanCan
  • 载波,Excon::Errors::MovedPermanently in RegistrationsController#update 错误

    我一直在尝试让 Carrierwave 与 amazon s3 一起工作 代替 storage s3 i have storage fog 将其更改为 storage s3 会立即出现错误 https stackoverflow com q
  • 使用 Ruby 通过 Outlook 发送消息的最简单方法是什么?

    我的工作要求我为某些测试自动生成电子邮件 我一直在四处寻找 但一直未能找到可以快速实施的合理解决方案 它需要在 Outlook 中 而不是其他邮件服务器中 因为我们有一些奇怪的身份验证规则 并且我们需要保存草稿的选项 而不仅仅是发送消息 显
  • 如何在 Rails 3 中查看用户的实时活动?

    我想做的是让我的管理员用户能够实时 通过一些 AJAX jQuery 功能 看到我的用户正在做什么 我该如何去做呢 我认为它与会话活动有关 并且我已经开始将会话保存到数据库 而不是 cookie 但一般来说 我如何获取该信息并实时解析它 我
  • 安装 Rails Apartment gem 时出现问题

    当我尝试时出现错误 bundle exec rails generate apartment install 收到此错误 build Apartment Reloader 的未定义方法新 字符串 无方法错误 看起来这是一个中间件问题 任何解
  • 如何在保存父对象时确保子对象有效?

    假设我有两堂课 class User attr accessible name has one address validates name presence gt true validates associated address end
  • Rails & Devise:如何在没有布局的情况下呈现登录页面?

    我知道这可能是一个简单的问题 但我仍在试图弄清楚Devise https github com plataformatec devise out 我想要render layout gt false在我的登录页面上 我怎样才能做到这一点Dev

随机推荐

  • 使用SoupStrainer选择性解析

    我正在尝试解析购物网站上的视频游戏标题列表 然而 由于项目列表全部存储在标签内 This http www crummy com software BeautifulSoup documentation html Improving 20P
  • 特定页面的访问者数量

    我想查看特定页面 我有该页面的 URL 上的访问者数量 我在 Analytics 中找不到输入 URL 来查找该特定页面的统计信息的位置 Go to Behavior gt Site Content gt All Pages and put
  • matlab中矩阵的排序

    我正在对矩阵进行模拟 假设是 5x5 矩阵 该矩阵的元素之一是已知的 下面的后方块 该位置不会始终位于中心 我想从该位置开始并螺旋式访问其他元素 我已按数字显示了顺序 如何在大矩阵 例如 1000x1000 中定义这个顺序 因为我无法手动完
  • 如何从 numpy 数组的每一行中仅获取第一个 True 值?

    我有一个 4x3 布尔 numpy 数组 我试图返回一个相同大小的数组 除了原始数组每行上第一个 True 值的位置之外 该数组全部为 False 所以如果我有一个起始数组 all bools np array False True Tru
  • 某些图像未在移动浏览器中显示(但在桌面浏览器中显示)

    我遇到的问题是 某些图像无法在 iPhone 上的移动浏览器中显示 但我可以在所有桌面浏览器中看到它们 在我的手机上 我只看到一个带有灰色边框的空白框 该图像应该在该位置 一些注意事项 这似乎是随机发生的 因为有些图像在一天显示 然后在第二
  • 如何将 ArrayList 传递给另一个应用程序中的活动?

    我正在尝试在两个应用程序之间共享数据 首先我想到将文件保存到SD卡然后读取它 但是这个解决方案不起作用 所以如果有办法发送一个文件 我会受伤ArrayList of an Object实现Parcelable 还可以采取什么其他方式来实现这
  • 我是否需要显式重载接受 const 左值引用作为右值引用的方法?

    目前我正在尝试右值引用 C 11 g 和 gnu x0 并且我想在我的类中实现移动语义 因为它感觉 正确 我是否需要重载通常接受 const 左值引用的每个函数才能从右值引用中受益 假设这是我的示例类 class Person public
  • 使用并行库添加到列表时保证线程安全的正确方法

    我循环访问连接字符串数组 并在每个循环中提取一些信息并将其添加到列表中 现在 我想使用并行库使其成为多线程 但我不确定该库是否保证对列表的写入是线程安全的 或者我是否需要使用锁定 List
  • 如何在django中调试ajax请求

    我知道例如 def home request if request method POST k p 1 return HttpResponse simplejson dumps dict mimetype application javas
  • Vim:将选定的文本通过管道传输到 shell cmd 并在 vim 信息/命令行上接收输出

    我想将选定的文本通过管道传输到 shell 命令并在 vim 信息 命令行上接收此 shell 命令的一行输出 我真正想做的事情 将选定的文本通过管道传输到pastebin类型的shell命令 并且我想接收shell cmd的输出 这是pa
  • 如何更改 Jekyll 网站的默认字体

    我是使用 Jekyll css 等的新手 我分叉了现在的杰基尔 https github com barryclark jekyll now回购 有没有办法可以更改或添加整个 jekyll 网站的默认字体 看起来像这个帖子 https st
  • 从另一个文本文件中读取基于键的文本文件作为列

    我是 Spark 新手 我正在尝试将表作为文本文件加载到 Spark 中 我想读取基于另一个文本文件列的文本文件 例如 Id 作为键 如果 B id 匹配 A id 那么我必须将文件 B 读入 Spark val file2 sc text
  • 即使设置了 CommandParameter,ICommand.CanExecute 也会传递 null

    我有一个棘手的问题 我正在绑定ContextMenu到一组ICommand 派生对象 并设置Command and CommandParameter每个属性MenuItem通过样式
  • 如何过滤动态嵌套列表对象java 8

    如何过滤动态嵌套列表对象java 8 Example class Items List
  • 多少个数据库表列太多了?

    我接手了一个项目的开发 该项目的用户表有超过 30 列 坏事是对列的更改和添加不断发生 这是不对的 我是否应该推动将额外的字段作为值移至第二个表中并创建第三个表来存储这些列名称 user id email user field id nam
  • 使用 Java 配置的 Spring OAuth2 最简单的示例是什么? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我最近在 Spring 中构建了一个 REST API 我正在使用 Net C 客户端使用它 目前没有
  • 从 SlickGrid 中的单元格获取数据

    SlickGrid 使用什么方法来获取单元格内容 例如 grid new Slick Grid myGrid data columns options grid onAddNewRow function item colDef grid r
  • 将图划分为具有最小割的相同大小的不相交集

    是否有任何算法或代码将图节点划分为两个或多个满足以下条件的不相交集合 首先 只允许删除边缘 其次 对边进行加权 并且要删除的边必须具有最小权重 最小切割算法 第三 所需的不相交集尽可能长地具有相同的大小 看起来您正在尝试解决最小二分问题 其
  • 字母数字和特殊字符的正则表达式

    我需要定义一个接受字母数字和以下特殊字符的正则表达式 我想出了 string pattern a zA Z0 9 s 但这似乎不起作用 有人可以让我知道缺少什么吗 The 中间需要转义 您可能还想用 a 来锚定字符串的开头 Probably
  • 笛卡尔积红宝石

    class CartesianProduct include Enumerable your code here end Examples of use c CartesianProduct new a b 4 5 c each elt p