工藤探偵事務所

Resarch and Investigation

ルビー3分クッキング 第三回『文字列は配列?』の巻

kudo-shunsaku2008-03-27


3分間で覚える Ruby のトピックスです。
でも、本家同様に実際には10分程度掛かります。

大事なのは小さな積み重ねと継続する才能ですね。

第三回は、「文字列は配列?」の巻です。

いきなりですが、『文字列』(Stringクラス) は『配列』(Arrayクラス) と似たように扱うことが出来ます。まだ配列について何にも説明していないのですけど、使いながら説明します。

文字列が文字(もしくは文字コード)の配列のようなものと想像できれば、文字列の操作を理解するのに有効だと想います。他のプログラミング言語をご存知の方にとっては比較しやすいかも?と。

ここでは文字列が配列に近い操作が出来ることを見てみたいのですが、その操作を覚えることは配列の操作も同時に覚えていくことなので一石二鳥かもしれません。

前置きはこの程度にしますね。

まず配列、そして文字列を作成して操作してみます。
ファイル名は、"string_as_array.rb" などとして下さい。

# 配列です。
array = ["o", "m", "e", "l", "e", "t"]
p array

# 最初の要素を返します。
p array[0]

puts

# 文字列です。
string = "omelet"
p string

# 文字列でも最初の要素だけを返します。
p string[0]

puts

実行時、コンソール画面。

C:\rubycode\3minutes2cooking>ruby string_as_array.rb
["o", "m", "e", "l", "e", "t"]
"o"

"omelet"
111

C:\rubycode\3minutes2cooking>

配列は、ブラケット(bracket, 角括弧)を使った配列式で作れます。
文字列は、ダブルクオート(double quotation, 二重引用符)で作りました。

配列は、添え字のインデクスでアクセスすることが出来ます。配列の先頭の添え字は「0」から始まる正の整数です。ブラケットで囲んだ添え字で指定してアクセス出来ます。
配列の一番最初の要素を取り出すと、文字列の「o」と返ってきました。

文字列でもあたかも配列の様に添え字で文字を返すことが出来ます。
確かに返ってきましたが、最初の文字を指定して配列の時と同じように「o」と期待したのですが、「111」という数字が出力されました。

これは文字列を添え字で指定すると数字(文字コード)を返すようになっている(?)ので、ASCII文字コードの10進数表示で、「111」という数字が出力されました。つまり英文字小文字で「o」な訳です。

これらから「文字列は、文字コードの配列」といった見方もすることができます。


次に配列での操作で部分配列を返す便利なもの、部分配列ニ題です。

先ほどのソースコードに追加して下さい。

# 添え字の場所から長さを指定した部分を返します。
p array[1, 2]
p string[1, 2]
puts

# 範囲指定が出来ます。
p array[1..3]
p string[1..3]
puts

# もう一つの範囲指定も出来ます。
p array[2...4]
p string[2...4]
puts

実行時、コンソール画面。

C:\rubycode\3minutes2cooking>ruby string_as_array.rb
["o", "m", "e", "l", "e", "t"]
"o"

"omelet"
111

["m", "e"]
"me"

["m", "e", "l"]
"mel"

["e", "l"]
"el"

C:\rubycode\3minutes2cooking>


最初のは、添え字の指定した添え字の場所から長さを指定した部分を返します。
もう一つは、範囲指定演算子というものです。二通りの指定があり、「x..y」とドットニ個の場合は、xからyまでという指定です。「x...y」ドット三個の場合は、xからy-1までの範囲になります。よく使う便利な表現なので覚えると有効でしょう。
配列と同様に文字列でも同じように使えることが確認出来ました。

しかも文字列の場合には部分配列は部分文字列となりますので、返ってくる値は文字列なのです。先ほどとちょっと違いますね。

おさらいしましょう。

p "tortilla de patatas"[7]
p "tortilla de patatas"[12,100]
p "tortilla de patatas"[9..11]

実行時、コンソール画面。

C:\rubycode\3minutes2cooking>ruby string_as_array.rb
97
"patatas"
"de "

C:\rubycode\3minutes2cooking>

ここでも先ほどまでと同じことを行っています。

先ほどは変数に代入してから操作しましたが、今度は直接(?)文字列を操作しました。この構文は見慣れないかとも想いますが、Ruby ではこういう書き方も大丈夫なのです。

これで文字列が配列ぽく扱えるのを体感頂けましたでしょうか。

最後にちょっと問題です。

文字列の中の一文字だけを数字じゃなくて文字として印字したい、という場合はどうしますか?

# 答えです。
p "tortilla francesa"[9,1]
p "tortilla francesa"[9...10]
puts

# 数字(文字コード)を文字に戻して印字します。
p "tortilla francesa"[9]
p "tortilla francesa"[9].chr

実行時、コンソール画面。

C:\rubycode\3minutes2cooking>ruby string_as_array.rb
"f"
"f"

102
"f"

C:\rubycode\3minutes2cooking>

文字列の扱いは基本的なものですが、結構複雑なものです。
次回以降でも、文字列の操作ついて言及が必要かとも想います。

また文字列と同等に配列(Array)は、Rubyプログラミングでの中心的な部分を占めます。

そして、もう一つハッシュ(連想配列、Hash)があります。

『配列』(Array)と『ハッシュ』(Hash)を制覇できれば、「鬼に金棒」の筈です。

今後は徐々にそちらにも手を伸ばしていきたいものです。

「たったら♫たったら♫たらたら♬たらこー♩」

今日はここまで。次回をお楽しみに。