独習Ruby 6 配列

独習Ruby

独習Ruby

多次元配列の参照

# coding : utf-8

kana = [["","","","",""],["","","","",""]]

puts kana[0]
#["あ","い","う","え","お"]

puts kana[0][3]
#["え"]

#kana[0][3] の解釈の仕方
#→配列kanaのインデックス「0」に格納されている配列のインデックス「3」の位置を指定。
# よって答えは「え」

puts kana[0..1][0]
#["あ","い","う","え","お"]

#kana[0..1][3]の解釈の仕方
#  →配列kanaのインデックス「0」から「1」に格納されている配列(→つまり、["あ","い","う","え","お"],["か","き","く","け","こ"]が呼び出される)、そ のインデックス「0」を指定するため ["あ","い","う","え","お"] が呼び出される。

練習問題6.1
1.直前の2要素の合計となる数列を作るプログラムを完成させてください。

僕の回答

a = [1,1]
5.times do |i|
 a<< a[i] + a[i+1]
end

puts a.inspect

一応はこれで求められてることはできたつもりだったんだけど…

回答

a = [1,1]
5.times do 
 a<< a[-1] + a[-2]
end

puts a.inspect

iとか要らなかった。


2.一つの配列から2次元配列を作るプログラムを完成させてください

僕の回答

a = [1,2,3,4,5,6,7,8,9]

b = []


a.each do |i|
  b << a[i-1..i+1]
end

puts b.inspect

#[[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7], [6, 7, 8], [7, 8, 9], [8, 9], [9]]

3つの数値ごとで切れてなきゃいけないんだけど、切れてしまってる。「3つ指定する」が出来てないのか…

回答

a = [1,2,3,4,5,6,7,8,9]

b = []

i = 0 
while i < a.size -2
  b << a[i , 3]
  i += 1
end

puts b.inspect 

サイズを2引いた数の間という指定をすることでa[i, 3]がちゃんと全部反映されるようになってるんだ。
僕の場合は範囲の指定が全部になってて、しかもaの参照の長さもループごとに大きくなってるから、結果がおかしくなってるんだな。