arrays - 多个数组中元素的组合

标签 arrays ruby

我正在开展一个化学研究项目,我需要创建各种角度的文件。我想要以下的每种组合:

angle1 can be from [0, -36, -72, -108, -144, -180]
angle2 can be from [-180, -108, -36]
angle3 can be from [0, -36, -72, -108, -144, -180]
angle4 can be from [-180, -108, -36]

我为此编写了一些 Ruby 代码,但它似乎只提供了预期组合数量的一半。我的编程技能不是很好,所以我想知道是否有人可以告诉我我做错了什么。

非常感谢您提供的任何帮助:

phi1 = [0, -36, -72, -108, -144, -180]
psi1 = [-180, -108, -36]

phi2 = [0, -36, -72, -108, -144, -180]
psi2 = [-180, -108, -36]

psi1.each do |a|
  psi2.each do |b|
    phi1.each do |c|
      psi2.each do |d|

        line1 = 'select' + "#{b}" + '}}'
        line2 = 'select' + "#{a}" + '}}'
        line3 = 'select' + "#{d}" + '}}'
        line4 = 'select' + "#{c}" + '}}'

        filename = "angles#{b}_#{a}_#{d}_#{c}"
        puts filename
        puts line1
        puts line2
        puts line3
        puts line4
      end
    end
  end
end

预期输出为“puts filename”,其中文件名为 phi1、psi1、phi2、psi2 的每个组合。我预计它会 put 324 次,但它只执行了 162 次。

最佳答案

您应该使用Array#product在这里。

phi1 = [0, -36, -72, -108, -144, -180]
psi1 = [-180, -108, -36]
phi2 = [0, -36, -72, -108, -144, -180]
psi2 = [-180, -108, -36]

phi1.product(psi1, phi2, psi2).each do |arr|
  puts "angles#{ arr.join("_") }"
  arr.each { |angle| puts "select #{angle}" }
end

angles0_-180_0_-180
select 0
select -180
select 0
select -180
angles0_-180_0_-108
select 0
select -180
select 0
select -108
...
angles-180_-36_-180_-108
select -180
select -36
select -180
select -108
angles-180_-36_-180_-36
select -180
select -36
select -180
select -36

phi1.product(psi1, phi2, psi2).count
  #=> 324

关于arrays - 多个数组中元素的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38835200/

相关文章:

ruby-on-rails - 如何使用 rails 4.2.7 和 ruby​​ 2.3.3 创建 rails api 项目?

ruby - 如何强制 rvm 使用旧版本的 llvm 在 arch 上安装 rubinius?

javascript - 计算数组中的元素并比较它们,javascript

ruby-on-rails - ActiveRecord 检查数组中的任何值是否与 postgres 中的数组中的值匹配

javascript - angular.js 更新变量的结果

c - 将 C 中的 Ruby block 与 SWIG 结合使用

ruby - 字符串中的 Rails 3 link_to

ruby - iframe 中的 Watir 和文本字段

c# - 将不同值类型的数组转换为字节数组

javascript - 使用php在每行的末尾添加一个逗号