配列

配列変数

これまで使っていた変数は、値をひとつしか入れられない。これを拡張して、 ひとつの変数名に、何個でも値を入れられるようにしたものが配列変数である。 Rubyでは、配列変数を Array という。

たとえば、変数 x を使う場合を考えてみる。

x = 5

とすると、x という名前の箱に、5が入る。

  x  
5

x を配列変数にすると何個でも値を入れられる。

x[0]x[1]x[2]x[3]x[4]
56329

配列の要素

上記の配列は、要素数5個の配列である。配列変数の最後についている [1]の部分を添字という。通常、添字は0から始まる数字 にする。Ruby言語では添字は0から始まらなくてもよいが、0から始める習慣をつ けておくと、他の言語を利用するときに便利だろう。

上記の例は、5, 6, 3, 2, 9 という要素数5個の配列である。このような配列 を作るには、

x = [5, 6, 3, 2, 9]

とする。変数xは、配列全体を意味する。5個あるうちの各要素 を取り出すには、変数の直後に [ ] をつけ、その中に添字を記す。 たとえば先頭の要素は、x[0] で利用する。

printf "x0=%d\n", x[0]

とすると、先頭要素である5が表示され、

x[4] = 10

とすると、(0から数えて)4番目(つまり末尾)の要素が10に変わり、 配列全体は

[5, 6, 3, 2, 10]

と変わる。

配列変数を利用する場合、最初から何個の要素があるか分かっているとは限 らない。必要に応じて個数を増やすことができる。ある変数を配列として利用 したい場合は、最初に要素数ゼロの配列を代入する。

x = []

続いて添字を1ずつ増やして行って値を代入すれば、 好きな個数の配列要素を使うことができる。

x[0] = "Hello!"
x[1] = 5
x[2] = 3.1415

 :
 (以下何個でも)

たとえば、標準入力から読み込んだ内容を配列に入れたければ、

n = 0		# 添字用
contents = []
while line=gets
  contents[n] = line
  n += 1	# 添字を1追加
end

とすれば良い。これをもっと簡単に、

contents = readlines

の1行で済ますこともできる。Rubyプログラムに与える標準入力が

Hello!
123
abc

だったとすると、配列 contents の中味は、

["Hello!\n", "123\n", "abc\n"]

となる。

配列を操作するメソッド

Arrayに対して行なえる、次のメソッドを覚えておこう。

次の四つのプログラムは、いずれも与えられた標準入力をいったん配列変数 に取り込み、そのまま出力するプログラムである。

cat1.rb

#!/usr/koeki/bin/ruby

n = 0				# 読み込むときの添字
contents = []
while line=gets
  contents[n] = line
  n += 1
end

n = 0				# また0から始める
while n < contents.length	# 行数分だけくり返す
  print contents[n]
  n += 1
end

cat2.rb

#!/usr/koeki/bin/ruby

contents = readlines

while line = contents.shift
  print line
end

cat3.rb

#!/usr/koeki/bin/ruby

contents = readlines

for line in contents
  print line
end

cat4.rb

#!/usr/koeki/bin/ruby

print readlines

printメソッドは、与えたものが配列変数の場合、各要素を先 頭から順に出力してくれる(ただ、この方法は簡単すぎて配列の使い方の練習に はならない)。


本日の目次