push
, <<
配列に要素を追加することができる。
arr = []
arr.push('りんご') => ["りんご"]
arr << 'みかん' => ["りんご", "みかん"]
%記法(パーセント記法)
'
や"
を別の文字に置き換えて書くことができます。
arr = %w[りんご みかん] => ["りんご", "みかん"]
arr2 = %w! りんご みかん! => ["りんご", "みかん"]
arr3 = %w(りんご みかん) => ["りんご", "みかん"]
%w
の場合、シングルクォート''
で囲ったのと同じ動作になります。
a = 'んご' => "んご"
b = 'かん' => "かん"
arr = %W[り#{a} み#{b}] => ["りんご", "みかん"]
%W
の場合、ダブルクォート""
で囲ったのと同じ動作になるため、式展開やバックスラッシュ記法を使用することができます。
繰り返し処理
eachメソッド
配列の要素の数だけブロック内で処理を繰り返します。
arr = %w[ りんご みかん ぶどう] => ["りんご", "みかん", "ぶどう"]
arr.each do |fruit|
break if fruit == 'ぶどう'
puts fruit
end
# 出力結果
# りんご
# みかん
=> nil
break
を使用することで繰り返し処理を終了することができます。
上記の場合、後置if文
を使用してfruit
がぶどうの場合に繰り返し処理が終了します。
arr = %w[ りんご みかん ぶどう]
=> ["りんご", "みかん", "ぶどう"]
arr.each do |fruit|
next if fruit == 'ぶどう'
puts fruit
end
# 出力結果
# りんご
# みかん
=> ["りんご", "みかん", "ぶどう"]
また、上記のように next
を使用することで一部の繰り返し処理をスキップさせることができます。
mapメソッド
配列の要素の数だけブロック内で処理を繰り返し、新しい配列を返します。
arr = ["りんご", "みかん", "ぶどう"]
arr.map { |fruit| "(#{fruit})" }
=> ["(りんご)", "(みかん)", "(ぶどう)"]
一部要素のみ取得したい場合
arr = [{id: 1, name: 'りんご'}, {id: 2, name: 'みかん'}, {id: 3, name: 'ぶどう'}]
arr.pluck(:name)
=> ["りんご", "みかん", "ぶどう", "りんご"]
多重代入
左辺に変数をカンマ区切りで記述し、右辺には左辺に記述した変数に代入するオブジェクトや式などをカンマ区切りで記述することで、複数の変数にまとめてオブジェクトを代入することができます。
foo, bar = [1, 2]
foo => 1
bar => 2
# []は省略可
foo, bar = 1, 2
foo => 1
bar => 2
foo, bar = 1
foo => 1
bar => nil
右辺の要素に対して左辺の変数が多い場合は無視され、
左辺の変数が右辺の要素より多い場合、代入される要素がない変数には「nil」が代入されます。
参考教材