配对红宝石中的数组元素

Arn*_*psa 0 ruby arrays

假设我有一个名为的数组teams.
我想计划matches为每一个team与所有其他team.

这几乎是我想要的,除了相同matches的添加两次:

teams.each do |red_team|
  teams.each do |blue_team|
    if red_team != blue_team
      @planned_matches << Match.new(red_team, blue_team)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

怎么做?

FMc*_*FMc 8

在Ruby 1.8.7+中,您可以使用Array#组合:

teams = %w(A B C D)
matches = teams.combination(2).to_a
Run Code Online (Sandbox Code Playgroud)

在1.8.6中,您可以使用Facets执行相同的操作:

require 'facets/array/combination'
# Same code as above.
Run Code Online (Sandbox Code Playgroud)