覚えておくと便利な Array のメソッド (追加)

前回「覚えておくと便利な Array のメソッド」のつづき。

Array#permutation

  • サイズ n の順列を生成。
(1..8).to_a.permutation(2).to_a 
# => [[1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [1, 8],
# =>  [2, 1], [2, 3], [2, 4], [2, 5], [2, 6], [2, 7], [2, 8],
# =>  [3, 1], [3, 2], [3, 4], [3, 5], [3, 6], [3, 7], [3, 8],
# =>  [4, 1], [4, 2], [4, 3], [4, 5], [4, 6], [4, 7], [4, 8],
# =>  [5, 1], [5, 2], [5, 3], [5, 4], [5, 6], [5, 7], [5, 8],
# =>  [6, 1], [6, 2], [6, 3], [6, 4], [6, 5], [6, 7], [6, 8],
# =>  [7, 1], [7, 2], [7, 3], [7, 4], [7, 5], [7, 6], [7, 8],
# =>  [8, 1], [8, 2], [8, 3], [8, 4], [8, 5], [8, 6], [8, 7]]

連勝単式の全ての組み合わせ。
三連勝単式なら permutation(3)

Array#product

前回も書いたけど、

  • 複数の Array の組み合わせ。
# open(path [, mode [, perm]] [, &block])

perm = [nil, :perm]         # perm は省略可
options = [nil] +           # mode は省略可
  [:mode].product(perm)     # mode を指定すると perm も指定可
block = [nil, :"&block"]    # block は省略可

# File.open は path に省略可能な mode, perm とブロックを付けて呼び出す
[:path].product(options).product(block).
  each{|p|puts "open(#{p.flatten.compact.join(', ')})"}

# >> open(path)
# >> open(path, &block)
# >> open(path, mode)
# >> open(path, mode, &block)
# >> open(path, mode, perm)
# >> open(path, mode, perm, &block)

File.open の使い方、全パターン。