【Arrayオブジェクト】Rubyの基礎【配列】

Ruby

今回はRubyの配列(Arrayオブジェクト)について解説していきます。

他にもRubyの基礎をまとめているので、よろしければ参考にしてください。

スポンサーリンク

配列の宣言

配列の宣言は以下のように行えます。

 pry(main)> []
=> []
 pry(main)> [1, 2, 3]
=> [1, 2, 3]

異なるクラスを格納

あまり使いませんが、配列に異なるクラスを格納することもできます。

 pry(main)> [1, 'あ', 1.5]
=> [1, "日本", 1.5

要素の追加

配列の中の値一つを要素と呼びます。
要素の追加方法を説明していきます。

pushメソッド

pushメソッドを使用することで以下のように要素を追加できます。

 pry(main)> arr = []
=> []
 pry(main)> arr.push('1番目')
=> ["1番目"]

<<演算子

<<演算子を使うことでも要素を追加することができます。

 arr = []
=> []
 pry(main)> arr.push('1番目')
=> ["1番目"]
 pry(main)> arr << '2番目'
=> ["1番目", "2番目"]

%記法(パーセント記法)

普通の記法ではシングルクオートで囲う必要がありますが、%記法を使うとスペース区切りで記載することができます。

 pry(main)> ['文', '字']
=> ["文", "字"]
 pry(main)> %w[文 字]
=> ["文", "字"]

その他に以下のようにも記載することができます。

 pry(main)> %w|文 字|
=> ["文", "字"]
[55] pry(main)> %w(文 字)
=> ["文", "字"]

w(ダブルユー)の大文字、小文字での動作の違い

w(ダブルユー)が小文字の場合と大文字の場合で、動作が異なります。
wを小文字にした場合はシングルクオートで囲ったものと同様の動作になり、大文字にした場合にはダブルクオートで囲ったものと同じ動作になります。

下記の例では小文字だと変数が読み込まれませんが、大文字だと読み込むことができます。

pry(main)> one = 1
=> 1
 pry(main)> two = 2
=> 2
 pry(main)> %w[a#{one} b#{two}]
=> ["a\#{one}", "b\#{two}"]
 pry(main)> %W[a#{one} b#{two}]
=> ["a1", "b2"]

シンボルの配列

シンボルを使った配列を宣言する際はパーセント記法の場合は、「%i」を使用して以下のように記載します。

pry(main)> %i[a b c]
=> [:a, :b, :c]

繰り返し処理

配列と親和性の高い繰り返し処理についても説明しておきます。

eachメソッド

以下のように記載して配列の中身を出力できます。

 pry(main)> %w[ あ い う].each do |str|
 pry(main)*   puts str
 pry(main)* end
あ
い
う
=> ["あ", "い", "う"]

break

途中で終了したい時は「break」を使用します。

 pry(main)> %w[ あ い う].each do |str|
 pry(main)*   break if str == 'う'
 pry(main)*   puts str
 pry(main)* end
あ
い
=> nil

next

一部だけスキップしたい際は「next」を記載します。

 pry(main)> %w[ あ い う].each do |str|
 pry(main)*   next if str == 'い'
 pry(main)*   puts str
 pry(main)* end
あ
う
=> ["あ", "い", "う"]

mapメソッド

mapを使うことで各要素を加工した配列を返すことができます。
Rubyではreturnを記載せず、最終行の値が戻り値と認識されます。

 pry(main)> %w[ あ い う].map { |str| "(#{str})" }
=> ["(あ)", "(い)", "(う)"]

多重代入

以下のように複数を代入することができます。

 pry(main)> foo, bar = [1, 2]
=> [1, 2]
[66] pry(main)> foo
=> 1
[67] pry(main)> bar
=> 2

値がない場合はnilになります。

 pry(main)> foo, bar = 1
=> 1
 pry(main)> foo
=> 1
 pry(main)> bar
=> nil

多い場合はエラーにならず無視されます。

 pry(main)> foo, bar = 1, 2, 3
=> [1, 2, 3]
 pry(main)> foo
=> 1
 pry(main)> bar
=> 2

まとめ

少しifの書き方とか違和感ありますが、慣れですかね。。。

フリーランスを目指すなら【テックパートナーズカレッジ】

未経験者向けWEBスクール【SHElikes】

コメント