配列について

Kazunori Kamiya
Aug 28, 2017 · 5 min read

・Exercise34:配列の各要素へのアクセス

配列が非常に便利というのはこれまでにも学習した通りで、配列の要素をその順番通りに扱うということまでは既に学習しました。
しかしもし仮に、配列の5番目の要素だけが欲しいとなった場合はどうでしょうか?
そのために配列の各要素へのアクセス方法を知る必要があり、まずは下のように配列の最初の要素にアクセスする方法を紹介します。

animals = ['bear', 'tiger', 'penguin', 'zebra']
bear = animals[0]

ここで最初の要素を取得するのに、0を使っていることに注意してほしいのですが、Rubyでは配列を0から始めるのが一般的です。

この違いを理解するには、普通の人とプログラマーでの数字の使い方の違いを説明しておいた方がいいでしょう。

上で出てきた配列[‘bear’, ‘tiger’, ‘penguin’, ‘zebra’]内の4匹の動物が、レースをしているところを想像してみてください。
それぞれの動物が、配列の順番通りにフィニッシュラインを越えました。
このレースはそれぞれの動物が互いを襲うこともなく、きちんとレースになっていたので非常に面白かったです。
ここでレース後に来た友人が、どの動物が1番になったか知りたがったとします。
この場合、”誰が0番目にフィニッシュした?”と聞いてくるでしょうか?
そんなことはなく、”誰が1番目にフィニッシュした?”と聞くのが普通です。

これは、動物の順番が非常に重要だからです。
最初の動物が決まらなければ、2番目の動物も決まらず、2番目の動物が決まらなければ3番目の動物も決まりません。
同様に重要なのが、0は何もないことを意味するため、0番目の動物というのは存在しないということです。
レースで勝者がいないというのは、全くもって無意味なことでしょう。
こういった数字は物事の順番を示すため、序数と呼ばれます。

しかしながらプログラマーの場合、どこからでも配列の要素を抜き出せるため、このようには考えません。
プログラマーにとって、上で示したような動物の配列はカードデッキのようなものです。
虎が必要ならばそれを抜き出せばよく、同様にシマウマが必要ならそれを取るだけで済みます。
こうするには配列の各要素をランダムに抜き取ることが必要で、実際に行うにはあて名やインデックスによって各要素を指し示すための方法が必要になり、その最良の方法はインデックスを0から始めることです。
この考え方を、基数といいます。

この考えを配列に用いるのは非常に簡単で、”序数を基数に変換するには前者から1を引く”と覚えておいてください。
つまり3番目のインデックスは2となり、要素としては”penguin”に当たります。

もう少し、実際に練習してみましょう。
下の配列で、これから言う数字の要素を答えてください。
ただし“first”、”second”と言った場合は序数の考え方をするので1を引いてください。
”1"、”2”と言った場合は、そのまま基数の考え方をしてください。

animals = ['bear', 'ruby', 'peacock', 'kangaroo', 'whale', 'platypus']
  1. The animal at 1. → The animal at 1 is ruby
  2. The third (3rd) animal. → The third animal is at 2 and is peacock
  3. The first (1st) animal. → The first animal is at 0 and is bear
  4. The animal at 3. → The animal at 3 is kangaroo
  5. The fifth (5th) animal. → The fifth animal is at 4 and is whale
  6. The animal at 2. → the animal at 2 is peacock
  7. The sixth (6th) animal. → The sixth animal is at 5 and is platypus
  8. The animal at 4. → The animal at 4 is whale

学習ドリル

  1. これら2つの数字の違いを本当に説明できるでしょうか?例えば、2010年1月1日はなぜ2009年ではなくて2010年になるのでしょうか?
  2. もう少し自分で配列を作成して、同様のインデックスを変換できるようにしてください。
  3. Rubyを使ってその答えを確かめてみてください。

学習ドリルの答え

2 & 3. 適当に配列を作り、また関数を作成して実行してみました。

)
Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade