初めてのruby 基本〜配列
初めてのrubyです。
自分用メモ
前提
全てオブジェクト
p "test".class #=>Stringクラス p 1.class #=>Fixnumクラス p 1.class.class #=>Classクラス
p関数は開発時に変数内部見るのに便利
代入演算子は毎回オブジェクトを作る。
1: a = 1 2: a = 1
- 1と2のaは別のオブジェクト。
1: a = "test" 2: p a.object_id #=>-604044008 3: a = "test" 4: p a.object_id #=>-604044028
こうすれば分かる。
object_idは別。
実行時に評価される
def hoge p "hoge" end hoge
これはOK
fuga def fuga p "fuga" end
これはエラー
1.8系と1.9系は相当違うらしい
RubyGemsを RubyGames に空目していたのはいい思い出
配列
リテラルは、[]
a = ["a",1,3]
添え字でも入力可能
- 範囲外の添え字も自動生成される
a = [1,2] a[2] = 3 a[4] = 5 p a #=>[1, 2, 3, nil, 5]
- 添え字の範囲指定もできる
a = [1,2] a[0] = 3 a[4] = "4" a[0,3] = 'a', 'b', 'c' p a #=>["a", "b", "c", nil, "4"]
マイナスの添え字も可能
a = [0,1,2,3,4,5] p a[-1] #=>5 p a[-3] #=>3
添え字の範囲指定
- [n..n]は末尾を含む
- [n...n]は末尾を含まない
c = [0,1,2,3,4,5,6,7,8,9] p c[0..3] #=>[0, 1, 2, 3] p c[0...3] #=>[0, 1, 2] p c[1...7] #=>[1, 2, 3, 4, 5, 6] p c[-2...2] #=>[] p c[-7...7] #=>[3, 4, 5, 6]
配列のメソッド
- length
- size
- *=
- sort
- include
- uniq
a = [1,2,3,4] p a.length #=>4 p a.size #=>4 p a *= 2 #=>[1, 2, 3, 4, 1, 2, 3, 4] p a.sort #=>[1, 1, 2, 2, 3, 3, 4, 4] p a.include?(1) #=>true p a.uniq #=>[1, 2, 3, 4] p a #=>[1, 2, 3, 4, 1, 2, 3, 4] a.uniq! #元の配列を更新 p a #=>[1, 2, 3, 4]
配列のイテレータ
- eachの使い方
do から end までが繰り返し。
hoge | パイプに囲まれた文字列に配列要素が一つずつ入ってくる |
a = ["Aaaa", "Bbbb", "Cccc"] a.each do |item| print item + "\n" end
- 結果
Aaaa Bbbb Cccc
- 配列の位置も利用したい場合
- each_with_index
a.each_with_index do |item, index| p [item, index] end
- 結果
["Aaaa", 0] ["Bbbb", 1] ["Cccc", 2]
数字のsort
- rubyのsort関数のデフォルトは文字によるソート
b = [1,2,3,99,20.9,"a","10"] p b #=>[1, 2, 3, 99, 20.9, "a", "10"] p b.sort{|x,y|x.to_i <=> y.to_i} #=>["a", 1, 2, 3, "10", 20.9, 99]
selectメソッド
- 要素内から真のものだけ取得する
c = [1,2,3,4,5,6,7,8,9,10] p c.select{|cc|cc % 2 == 0} #=>[2, 4, 6, 8, 10]