始めに・・・
先日後輩のコードレビューをしていた際に「ハッシュがさぁ!ハッシュがさぁ!」と先輩ぶっていたが単純に配列だったという悲しいことを晒したので懺悔の意味も込めて、、、
配列とは、、、
配列とは複数のデータを纏めて格納できるオブジェクト
#空の配列
[]
#サンプル
['配列1','配列2','配列3']
#クラスはArray
[].class #=> Array
#サンプル
irb(main):003> a = ['配列1','配列2','配列3']
=> ["配列1", "配列2", "配列3"]
irb(main):004> a[0]
=> "配列1"
主にRailsだとeachで使う気がする
numbers = [1,2,3,4,5]
irb(main):009> sum = 0
=> 0
irb(main):010* numbers.each do |n|
irb(main):011* sum += n
irb(main):012> end
=> [1, 2, 3, 4, 5]
irb(main):013> sum
=> 15
あとmapとか?(最近はpluckとの使い分けを気にしてる)
irb(main):014> new_numbers = []
=> []
irb(main):015> numbers.each { |n| new_numbers << n * 10}
=> [1, 2, 3, 4, 5]
irb(main):016> new_numbers
=> [10, 20, 30, 40, 50]
※余談だがidのみの使用とか要素がわかってるものに関してはpluckの方が良い。
# 全て取得できるので小回りは効く。book.titleとか呼べる。但し全部ロードするからデータ量が多くなるときつくなる
books = Book.all
book_ids = books.map { |book| book.id }
# idだけ使うとかの場合はpluckのほうがコスパいい
book_ids = Book.pluck(:id)
ハッシュ
ハッシュはキーの組み合わせでデータを管理するオブジェクト。連想配列と呼ばれたりする
irb(main):018> {}.class
=> Hash
# 文字列の場合
irb(main):019> currencies = {'japan'=>'yen','us'=>'dollar','india'=>'rupee'}
=> {"japan"=>"yen", "us"=>"dollar", "india"=>"rupee"}
irb(main):021> currencies['india']
=> "rupee"
# シンボルの場合
irb(main):001> currencies = {:japan=>'yen',:us=>'dollar',:india=>'rupee'}
=> {:japan=>"yen", :us=>"dollar", :india=>"rupee"}
irb(main):002> currencies[:japan]
=> "yen"
# 「=>」は省略できるよ
irb(main):001> currencies = {japan: 'yen',us: 'dollar',india: 'rupee'}
=> {:japan=>"yen", :us=>"dollar", :india=>"rupee"}
irb(main):002> currencies[:us]
=> "dollar"
ちなみに構造は [キー1]=> 値1, [キー]=>値2
みたいな感じ。
キーは別に文字列じゃなくていい。むしろシンボル(:hoge)の方が良い。
理由は文字列(string)は変更が効くから、場合によってキーが変わる。
# 文字列の場合
irb(main):022> string = 'apple'
=> "apple"
irb(main):023> string.upcase!
=> "APPLE"
# シンボルの場合
irb(main):024> symbole = :apple
=> :apple
irb(main):025> symbole.upcase!
(irb):25:in `<main>': undefined method `upcase!' for an instance of Symbol (NoMethodError)
コツコツ復習やっておこう(戒め)