配列
今日は配列の話でした。
配列って変数より便利だけど気を使います。なんでかって言うと、インデックスとか、初期化を常に意識していないといけないから。その点変数は名前のつけ方だけ気にすればいいので、変数のほうが使いやすい。
ですが、
便利なのは配列。
多量のデータがある時は配列を使うにかぎります。
長いコード書く時・読む時はデータがまとまっていると読みやすいから。
さて、配列で気になることは
「配列を参照する変数は配列リテラルで初期化しておく」
ということ。
なんじゃこりゃ。
まずは日本語分析から入ります。
「配列を参照する変数」
hoge = array[] かな?
「配列リテラルで初期化しておく」
hogeを配列にしておく必要がある ってことかな?
- 配列リテラル
- 配列の要素を設定するのにデータを直接記述する方法
上記から配列は「初期化してから値を代入しましょう」と考えました。
Rubyの初期化方法はインデックス要素を指定しないので簡単です。
hoge = [] hoge[0] = 0
10個の配列"progression"に1〜10までの数をランダムで代入し、その平均値を求めるプログラムを書きました。
手間取ったことだけ上げると、
・for 変数名 in (開始値..終了値)
配列数10個からfor 変数名 in (0..10)にした
・変数の初期化を忘れた
以上です。
1 # encoding: cp932 2 3 progression = [] 4 array_num = 0 5 sum = 0 6 7 puts("progression") 8 for count in (0..9) 9 progression[count] = rand(10) + 1 10 sum += progression[count] 11 array_num = count 12 puts("#{progression[count]}") 13 end 14 15 average = sum / array_num 16 puts("average : #{average}")
line5のsumを初期化し忘れたことで、
rand_average.rb:9: undefined method `+' for nil:NilClass (NoMethodError)
こんなエラーが出てしまいました。始めは「変数 += 配列」は使えないのかと思ってましたが、sumを初期化することを忘れたのでプログラムがsumが何なのかわからなかったからエラーになったとわかりました。<<演算子も覚えたので、上記のコードを変更して使ってみました。
9 progression[count] = rand(10) + 1 ↓↓<<演算子を使う↓↓ 9 progression << rand(10) + 1
- ">>演算子"
- 配列の最後に要素を追加する