配列

今日は配列の話でした。

配列って変数より便利だけど気を使います。なんでかって言うと、インデックスとか、初期化を常に意識していないといけないから。その点変数は名前のつけ方だけ気にすればいいので、変数のほうが使いやすい。

ですが、

便利なのは配列。
多量のデータがある時は配列を使うにかぎります。
長いコード書く時・読む時はデータがまとまっていると読みやすいから。


さて、配列で気になることは


「配列を参照する変数は配列リテラルで初期化しておく」


ということ。
なんじゃこりゃ。
まずは日本語分析から入ります。


「配列を参照する変数」
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
">>演算子"
配列の最後に要素を追加する