配列に関するメソッド【ruby】
Overview
プログラミングスクールに通い学習しましたが、改めてrubyについて学習。
配列とは
複数の要素をまとめて管理できるオブジェクトです。
配列内の要素は、インデックス(添字)で取り出すことができます。
[ ]を使って配列を作成します。
> a = ['apple', 'orange', 'melon']
# 配列を作成
> a
# 配列を確認
=> ["apple", "orange", "melon"]
インデックスは、0から始まります。一番目の要素を取り出す際は[0]と指定します。
> a[0]
# 配列の1つ目を取り出す
=> "apple"
> a[2]
# 配列の3番めを取り出す
=> "melon"
ちなみに、配列はArrayクラスのオブジェクトです。
> [].class
=> Array
length / size
lengthメソッド(※エイリアスメソッドは、sizeメソッド)を使えば、配列に入っている要素数を取得できます。
※メソッド名は異なるが、機能は同じメソッド
> a = ['apple', 'orange', 'melon']
> a.length
=> 3
> a.size
=> 3
delete_at
指定した配列の要素を削除
> a=> ["apple", "orange", "melon"]
# 配列作成
> a.delete_at(1)
=> "orange"
# orangeのインデックスを指定
> a
=> ["apple", "melon"]
# orangeが削除されている
divmod
割り算の商と余りを配列で返す
division(割る)
mod(剰余、余り)
> 15.divmod(3)
# 15/3
=> [5, 0]
# [商, 余]
> quotient, remainder = 15.divmod(4)
=> [3, 3]
# 多重代入で別々の変数に入れる
> quotient
=> 3
> remainder
=> 3
each
配列の要素を最初から最後まで取り出し、ブロック(下画像の赤字部分)内の処理を行う。
戻り値は、もとの配列と変わらない。
> numbers = [1, 2, 3]
>numbers.each do |n|
# nは、ブロック引数といいます。
print n + 1
# 配列の要素順に1を足していく
> end
234 => [1, 2, 3]
# 処理結果 => 戻り値
また、ブロックは{ }で書くこともできます。
> numbers.each { |n| print n + 1 }
234=> [1, 2, 3]
・改行を含める長いブロックは、do . . . end
・1行でコンパクトに書きたい時、 { . . . }
と使い分ける場合が多い
map / collect
eachメソッドの次に使用頻度が高いメソッドが、mapメソッド(エイリアスメソッドは、collect)です。
mapメソッドは、ブロックで評価した値を配列で返します。
> numbers = [1, 2, 3]
> numbers.map { |n| n + 1 }
=> [2, 3, 4]
# ブロック内で処理した結果を返している
> numbers.each { |n| n + 1 }
=> [1, 2, 3]
# もとの配列の値を返してる
この戻り値の結果は、変数を作成する際に重要です。例えば、eachで新しい配列を作成する際には下記のようになります。
> numbers = [1, 2, 3]
> new_number = []
# 新しい入れ物を作成
> numbers.each { |n| new_number << n * 10 }
=> [1, 2, 3]
# <<にてnew_numberに、n * 10の結果を代入
> new_number
# new_numberを確認
=> [10, 20, 30]
new_numberという入れ物を、ブロック外で作成しています。
> numbers = [1, 2, 3]
> new_number = numbers.map { |n| n + 1 }
=> [2, 3, 4]
# 戻り値をそのまま変数に代入
> new_number
=> [2, 3, 4]
ブロックで処理した結果が配列で帰ってくるので、mapでは戻り値をそのまま変数に代入することができます。
少し長くなるので、配列に関しては二回に分けては投稿します!