Ruby 配列まとめ

Rubyの配列においてこれだけ覚えればなんとかなる(と思う)ものをまとめてみました。
初学者の人も一通り頭に入れればこんなのもあったなと思い返してもらえれば大丈夫です。

目次

1、積集合
2、差集合
3、和集合
4、sliceメソッド

「抽出」
1、combination
2、transpose
3、select
4、reject
5、take_while
6、flatten

「削除」
1、delete_at
2、divmod
3、delete
4、delete_if

&「積集合」


2つの配列から一致する要素を取得して新しい配列を作成します。

n = [2,3,4,5]
m = [2,4,5,6,7]
p  n & m
結果=> [2, 4, 5]


ー「差集合」


重複している数字を取り除いた結果を配列にして返します。

n = [2,3,4,5]
m = [2,4,5,6,7]
p n - m
結果 => [3]


+「和集合」


重複している要素が取り除かれ、新しい配列を作成します。

n = [2,3,4,5]
m = [2,4,5,6,7]
p n + m
結果 => [2, 3, 4, 5, 2, 4, 5, 6, 7]


sliceメソッド


配列の中から任意の範囲を抽出するのに便利なメソッドです。

n = 09004983
m = "090"
puts n.slice(m)
結果=> 090





「配列の抽出」

combination


配列の中で引数と同じ数の配列をすべて作ってくれます。
例 引数が(1)のとき

sum = [1,2,3,4,5]
p sum.combination(1).to_a 
結果=> [[1], [2], [3], [4], [5]]


例 引数が(2)のとき

sum = [1,2,3,4,5]
p sum.combination(2).to_a
結果=> [[1, 2], [1, 3], [1, 4], [1, 5], [2, 3], [2, 4], [2, 5], [3, 4], [3, 5], [4, 5]]


transpose


配列の行列を入れ替えた配列を返してくれます。

sum = [[1,2],[3,4],[5,6]]
p sum.transpose
結果=> [[1, 3, 5], [2, 4, 6]]


結構便利なので覚えておくと良いと思います。

select


selectメソッドのブロック内の式でtrueになる要素を抽出します。

sum = [1,2,3,4,5]
p sum.select{|p| p.even?} 
結果=>[2, 4]


応用編
getsで標準入力した値のうち、2の倍数をmの配列にして要素数を出す場合

n = gets.to_i
m = gets.split(' ').select { |n| n.to_i % 2 == 0 }
puts m.size


reject


selectの逆でブロック内の式がfalseになるものを抽出します。

sum = [1,2,3,4,5,6]
p sum.reject{|p| p.even?}
結果=> [1, 3, 5]


find


ブロック内の式がtrueになった最初の要素を抽出します。
trueになる要素がない場合「nil」を返します。

sum = [1,2,3,4,5,6]
p sum.find{|p| p.even?}
結果=> 2


take_while


ブロック内の式がfalseになる手前までの配列を返します。

sum = [1,2,3,4,5,6]
p sum.take_while{|p| p < 5}
結果=>[1, 2, 3, 4]



flatten


二次元配列を平坦化した配列を返す(中の配列をバラして一つの配列にする)
とっても便利です

array = [[1,2,3],[4,5,6],[7,8,9]]
p array.flatten
結果=> [1, 2, 3, 4, 5, 6, 7, 8, 9]



「配列の削除」

delete_atメソッド


配列の削除をするには「delete_at」を使います

n = [1,2,3,4]
puts n.delete_at(1)
結果=> [1,3,4]


divmodメソッド


割り算の商とあまりを配列に返す

p 12.divmod(2)
結果=> [6, 0]



deleteメソッド


引数に消したい要素の値を入れる

n = [1,2,2,3,4,5]

n.delete(2)
p n
結果=> [1, 3, 4, 5]


delete_ifメソッド


「delete_if」を使うことで条件にあった値があった場合削除することができます。

n = [1,2,2,3,4,5]

n.delete_if do |o|
    o.odd?
end
p n
結果=>  [2, 2, 4]