Help us understand the problem. What is going on with this article?

Ruby.学習その3

投稿目的

  • 個人の学習目的で投稿していきます。
  • Rubyの入門を読みながら自分なりの思考で記述しています。

参考資料

ゼロからわかる Ruby 超入門 (かんたんIT基礎講座)

配列とは?

  • 配列とはオブジェクトをまとめて扱うための道具。
  • 数値や文字列と同様、配列もオブジェクト。

クラス(オブジェクトの種類)

  • 整数クラスはInteger
  • 浮動小数点数クラスはFloat
  • 文字列クラスはString
  • 配列クラスはArray

配列

  • []の中にオブジェクトを記述することで配列して扱うことができる。
  • ,(カンマ)区切りで複数のオブジェクトを記述することができる。
  • 配列の中身である個々のオブジェクトを要素という。
[オブジェクト1, オブジェクト2, オブジェクト3]
  • 配列も変数に代入する事で配列名を付けることができる。
  • 配列は複数形で名前を付ける。
配列名 = [オブジェクト1, オブジェクト2, オブジェクト3]

配列の要素を取得

  • 配列を作成して要素を取得することができる。
  • 配列名に[]で番号を指定することで要素を取得することができる。
  • 番号は左から順に0から数えていく。
#要素番号     0        1        2
array = [object1, object2, object3]
puts array[0]  #  object1
puts array[1]  #  object2
要素を取得するための専用のメソッド
  • firstメソッドは[0]と同じ意味を持つ。
array.first  #  先頭の要素を取得する
  • lastメソッドは[-1]と同じ意味を持つ。
array.last   #  末尾の要素を取得する
nil
  • nilは[何もない]ことを表すオブジェクト。
array = [object1, object2]
p array[2]  #  array配列に要素2は存在しないのでnilを返す

要素を追加、削除

  • メソッドを利用する際基本は[.メソッド名()]で利用することができる。
  • ()の中に値を記述する。
末尾に要素を追加
  • 配列の末尾へ要素を追加するにはpushメソッドを利用する。
array = ["a", "b", "c"]

array.push("d") # ["a", "b", "c", "d"<= 末尾に追加]
  • << 記号を利用して末尾に要素を追加することもできる。
array = ["a", "b", "c"]

array << "d" # ["a", "b", "c", "d"<= 末尾に追加]
先頭に要素を追加
  • 配列の先頭へ要素を追加するにはunshiftメソッドを利用する。
array = ["a", "b", "c"]

array.unshift("d") # ["d"<= 先頭に追加, "a", "b", "c",]
末尾の要素を削除
  • 配列の末尾の要素を削除するにはpopメソッドを利用する。
array = ["a", "b", "c"]

array.pop # ["a", "b"] "c"を削除
先頭の要素を削除
  • 配列の先頭の要素を削除するにはshiftメソッドを利用する。
array = ["a", "b", "c"]

array.shift # [b", "c"] "a"を削除
配列を足し算
  • 配列を足し算をすると二つを結合させた新しい配列ができる。
array1 = [1, 2, 3]
array2 = [4, 5, 6]

p array1 + array2 # [1, 2, 3, 4, 5, 6]
配列を引き算
  • 配列を引き算すると元の配列から要素を取り除いた新しい配列ができる。
  • 配列を引き算すると左辺の配列が返ってくる。
  • 左辺と右辺の配列を見比べてどちらにも存在する要素を取り除いて結果を返す
array1 = [1, 2, 3]
array2 = [3, 5, 1]

p array1 - array2 # [2]

配列の繰り返し処理

eachメソッド
  • eachメソッドは配列の全要素を繰り返し処理するメソッド。
  • |(パイプ)で囲ってある部分は変数名でその変数に配列の各要素が繰り返し代入されて実行される。
array = [1, 2, 3]

array.each do |aray|
    puts aray
end
繰り返し処理を途中で終わらせる
  • 繰り返し処理を途中で終わらせるにはbreakを利用する。
  • breakの後にifを付けて条件を付けることで[〇〇したら終了]とできる。
[1, 2, 3].each do |hensuu|
    break if hensuu == 2  #  hensuuの値が2の場合繰り返し処理を終了する
    puts hensuu
end
繰り返し処理をスキップする
  • 繰り返し処理をスキップする場合はnextを利用する。
  • break同様、後にifを付けて条件が一致した値はスキップされる。
[1, 2, 3].each do |hensuu|
    next if hensuu == 2  #  hensuuの値が2の場合処理をスキップする
    puts hensuu
end
範囲を指定して繰り返す
  • 下記のオブジェクトを利用する事で指定した範囲を繰り返すことができる。
  • (3..5)は[3から5まで]の範囲を表すオブジェクトでRangeオブジェクトという。
(3..5).each do |hensuu|
    puts hensuu 
end

配列の便利なメソッド

配列の要素数を得る
  • 配列の要素数を得るにはsizeメソッドを利用する。
puts [1, 2, 3].size # 3
配列の全要素の合計、平均、浮動小数を得る
  • 配列の全要素の合計を得るにはsumメソッドを利用する。
  • sumメソッドはRuby2.4から追加された。
puts [2, 4, 6].sum # 12
  • 平均はsizeメソッドとsumメソッドを利用して求めることができる。
array = [1, 2, 3]

puts array.sum / array.size # 2
  • 浮動小数を求めるにはto_fメソッドを利用する
  • メソッドが繋がっている場合は先頭のメソッドから実行される。
a = [1, 1, 3]

puts a.sum.tp_f / a.size # 1.67
重複している要素を取り除く
  • uniqメソッドは重複している要素を取り除くメソッド。
  • 自分自身(array1)の要素は変わらずに重複した要素を取り除いた新しい配列を返す。
array1 = [1, 1, 2]
array2 = array1.uniq

p array1 # [1, 1, 2]
p array2 # [1, 2]
末尾に!がつくメソッド
  • !がつくメソッドは自分自身の配列オブジェクトを変更するかどうかの違い。
  • このような変更のことを[破壊的変更]という。
array1 = [1, 1, 2]
array2 = array1.uniq!

p array1 # [1, 2] <=自分自身の配列も変わる
p array2 # [1, 2]
オブジェクトIDを返す
  • 破壊的に変更されたかはobject_idというメソッドを使うと分かる。
  • object_idメソッドはそれぞれのオブジェクトに割り当てられる識別番(オブジェクトID)を返す。
  • !を付けないとオブジェクトIDは違うIDで返ってくる。
array1 = [1, 1, 2]
array2 = array1.uniq

p array1.object_id # 70276759668640
p array2.object_id # 70276759668600 
  • !を付けてオブジェクトIDを表示させると自分自身の配列も変わるのでオブジェクトIDも同じになる。
array1 = [1, 1, 2]
array2 = array1.uniq!

p array1.object_id # 70346971785000
p array2.object_id # 70346971785000
ランダムに要素を取得する
  • ランダムに要素を取得するにはsampleメソッドを利用する。
puts [1, 2, 3].sample # ランダムで要素一つを取得する
昇順に要素を並び換える
  • 昇順に要素を並び換えるにはsortメソッドを利用する。
p [4, 2, 8].sort # [2, 4, 8]
  • 文字列の時はabc順に並び換わる。
  • 頭の文字が同じ場合は2文字目で判断する。
  • 大文字が先で、小文字は後。
p ["hitomi", "asuka", "tama"].sort
p ["aya", "asuka", "tama"].sort
p ["aya", "asuka", "Tama"].sort
降順に要素を並び換える
  • 降順に要素を並び換えるにはreverseメソッドを利用する。
p [4, 2, 8].reverse # [8, 4, 2]
  • reverseもsort同じで文字列も並び換えることができる。
  • 文字列を並び換えるルールもsortと同じ。
p "abc".reverse #=> "cba"
ランダムに要素を並び換える
  • ランダムに要素を並び換えるにはshuffleメソッドを利用する。
p [1, 2, 3].shuffle # ランダム配列の中身が並び換わる
配列と文字列を連結
  • 配列と文字列を連結させるにはjoinメソッドを利用するのが最適。
  • joinメソッドで()を付けて引数を渡すことで要素の間に入る文字を指定することができる。
puts ["abc", "def", "ghi"].join("と")  #=> "abcとdefとghi"
文字列を分割して配列にする
  • 文字列を配列にするにはsplitメソッドを利用する。
  • splitメソッドは区切り文字で分割して配列にする。
p "カフェラテ チーズケーキ バニラアイス".split
補足: メソッドへ()に記述して渡すオブジェクトのことを引数という.
配列の各要素を変換
  • mapメソッドは配列の各要素へ処理を行い、変換してできた要素を持った新しい配列を作るメソッド。
  • この例の場合は各要素に2を乗算した値を返す。
array = [1, 2, 3].map do |x|
    x * 2 # [2, 4, 6]
end
  • 他の種類のオブジェクトへ変換することもできる。
array = [100, 200, 300].map do |x|
    "#{x}円" # ["100円", "200円", "300円"]
end
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away