配列について2

#メソッドの可変長
def plus (*s)
  "#{s.join('')}が引数に設定されました!"
end
puts plus(1,2,3) #1と2と3が引数に設定されました!

#配列に配列を展開したい場合は*をつける
#*をつけないと配列の配列になってしまう
a = [1,2,3]
puts [0, a].to_s #[0, [1, 2, 3]]
puts [0, *a].to_s #[0, 1, 2, 3]

#配列の値の比較
puts [1,2] == [1,2] #true
puts [1,2] == [2,1] #false

#文字列を配列に格納する
a = 'abcd'.chars
puts a.to_s #["a", "b", "c", "d"]

#引数で指定した文字で区切って配列に入れる
a = 'a b c d'.split(' ')
puts a.to_s #["a", "b", "c", "d"]

#初期化 aとbは同じこと
a = []
b = Array.new
puts a == b #true

#要素数を指定して初期化 aとbは同じこと
a = [nil,nil,nil,nil,nil]
b = Array.new(5)
puts a == b #true

#第1引数に要素数、第2引数に初期値を指定して初期化
a = [1,1,1,1,1]
b = Array.new(5, 1)
puts a == b #true

#ブロックを使って初期化。nには配列の添え字が設定される
a = Array.new(3) { |n| n*2}
puts a.to_s #[0, 2, 4]

# newの第2引数で初期化すると全要素が同じオブジェクトを参照
# ブロックを使って初期化すると各要素が異なるオブジェクトを参照
a = Array.new(3, 'abc') #["abc", "abc", "abc"]
b = Array.new(3){'abc'} #["abc", "abc", "abc"]
a[0].upcase! #破壊的変更
b[0].upcase! #破壊的変更
puts a.to_s #["ABC", "ABC", "ABC"] 全要素が変わる
puts b.to_s #["ABC", "abc", "abc"] upcaseメソッドを読んだ要素だけ変わる
参考文献

「プロを目指す人のためのRuby入門」