107
86

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ruby Arrayの組み合わせ系メソッドまとめ

Last updated at Posted at 2018-08-02

覚えていると便利なArrayの組み合わせ系メソッドのまとめです。
(一部ActiveSupportのメソッドもあります)

combination

組み合わせ(順序なし、重複を許さない)

# to_a
> [1,2,3].combination(2).to_a
=> [[1, 2], [1, 3], [2, 3]]

# map
> [1,2,3].combination(2).map {|arr| arr.map(&:to_s) }
=> [["1", "2"], ["1", "3"], ["2", "3"]]

repeated_combination

組み合わせ(順序なし、重複を許す)

> [1,2,3].repeated_combination(2).to_a
=> [[1, 1], [1, 2], [1, 3], [2, 2], [2, 3], [3, 3]]

permutation

順列(順序あり、重複を許さない)

> [1,2,3].permutation(2).to_a
=> [[1, 2], [1, 3], [2, 1], [2, 3], [3, 1], [3, 2]]

repeated_permutation

重複順列(順序あり、重複を許す)

> [1,2,3].repeated_permutation(2).to_a
=> [[1, 1], [1, 2], [1, 3], [2, 1], [2, 2], [2, 3], [3, 1], [3, 2], [3, 3]]

product

複数の配列の要素の組み合わせ
配列の配列を作成して返す。

[1,2].product([3,4], [5,6])
=> [[1, 3, 5], [1, 3, 6], [1, 4, 5], [1, 4, 6], [2, 3, 5], [2, 3, 6], [2, 4, 5], [2, 4, 6]]

zip

複数の配列の要素の組み合わせ
配列の配列を作成して返す。

> [1,2,6,7].zip([3,4,5])
=> [[1, 3], [2, 4], [6, 5], [7, nil]]

transpose

行列を入れ替える

> [[1,2,6], [3,4,5]].transpose
=> [[1, 3], [2, 4], [6, 5]]

( * )

5.times.map { [0] * 3 }
=> [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

in_groups_of (ActiveSupport)

指定個数毎に切り分ける

[1, 2, 3, 4, 5, 6, 7].in_groups_of(2, false)
=> [[1, 2], [3, 4], [5, 6], [7]]

in_groups (ActiveSupport)

指定個数に切り分ける

[1,2,3,4,5,6,7].in_groups(2, false)
=> [[1, 2, 3, 4], [5, 6, 7]]
107
86
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
107
86

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?