Rubyプログラミングの基礎まとめ(第4回)配列の基礎とループ処理との組み合わせ

Rubyによる配列

前回は繰り返し処理をやってみました。今回は配列について書きます。繰り返し処理と配列を組み合わせた処理についても書こうと思います(ノ)・ω・(ヾ)

配列とは

変数は1つの値を入れますが、配列は複数の要素を入れることができます。

例えば数値(1〜5)を配列(suuzi)に代入するには、[ ]で囲って,(カンマ)で区切ります。

suuzi=[1,2,3,4,5]

文字列(データ1〜データ5)を配列(mozi)に代入する場合は文字列それぞれを” “で囲います(・ω・)ノ

mozi=[“データ1″,”データ2″,”データ3″,”データ4″,”データ5”]

また、配列への代入は %w() で囲み、それぞれの要素の間にスペースを入れることで簡略化することができます。この場合、文字列も” “は不要です。

suuzi=%w(1 2 3 4 5)
mozi=%w(データ1 データ2 データ3 データ4 データ5)

データを全て表示する

配列名を指定します。

puts(mozi)

データ1からデータ5までが全て表示されます。

配列の要素を取り出す

配列(suuzi)からn番目の数値(要素)を取り出すには、

suuzi[n-1]

とします。例えば配列 mozi からデータ3(3番目の要素)を取り出して表示するには、

puts(mozi[2])

とします。「データ3」と表示されます(ノ)・ω・(ヾ)

なお、最後からn番目の要素は次のように指定します。

mozi[-n]

mozi[-2] であれば、「データ4」を指定できます。

配列に要素を追加する

追加するには<<を使います。文字列の場合は要素を” “で囲むのを忘れずに(・ω・)ノ

配列名<<要素

実際に追加してみます。

fruits=%w(りんご みかん 梨 ぶどう)
fruits<<“メロン”
puts(fruits)

「りんご」から「メロン」まで追加されているのがわかります。

次のように別の配列を足し算する方法でも追加できます。

fruits+=[“メロン”]

複数でも可能。

fruits+=[“メロン”,”パイナップル”]

配列同士の足し算も可能。1から10まで表示されます。

x=[1,2,3,4,5]
y=[6,7,8,9,10]
x<<y
puts(x)

次のように直接足してもOK !同じく1から10まで表示されます。

x=[1,2,3,4,5]
y=[6,7,8,9,10]
puts(x+y)

生徒の指名と点数を配列に格納して表示させる

次のようなデータがあるとします。

名前 太郎 花子 一郎 二郎 三郎
点数 100 90 80 70 60

このデータの名前と変数をそれぞれ配列で次のようにまとめられます。

name=%w(太郎 花子 一郎 二郎 三郎)
tensuu=[100,90,80,70,60]

まず、太郎君の点数を表示してみます。

puts(#{name[0]}君の点数は#{tensuu[0]}点です。)

花子さんの点数はこうです。

puts(#{name[1]}君の点数は#{tensuu[1]}点です。)

ここでfor文(繰り返し処理)を使って全員の名前と点数を表示させてみます。要素数が5個ですので 0から4(0..4)の範囲でループ処理します。

name=%w(太郎 花子 一郎 二郎 三郎)
tensuu=[100,90,80,70,60]
for suuzi in 0..4 do
puts(“#{name[suuzi]}君の点数は#{tensuu[suuzi]}点です。”)
end

ここで、要素数が変わっても指定範囲を変更しなくて済むようにします。配列の中の要素数を表すlengthメソッド(処理)があります。

配列名.length

これを使って、0..4を次のように置き換えます。

0..name.length-1

name.length-1 とするのは、配列数は1から数えて「5」となるからです。

name=%w(太郎 花子 一郎 二郎 三郎)
tensuu=[100,90,80,70,60]
for suuzi in 0..name.length-1 do
puts(“#{name[suuzi]}君の点数は#{tensuu[suuzi]}点です。”)
end

太郎君の点数は100点です。
花子君の点数は90点です。
一郎君の点数は80点です。
二郎君の点数は70点です。
三郎君の点数は60点です。

これでみんなの名前と点数が表示されるようになりました(ノ)・ω・(ヾ)

配列とループ処理を組み合わせる例

配列とfor文

ここで少しfor文について付け加えです。for文の範囲には配列名も指定できます(・ω・)ノ

for 変数 in 配列名 do
処理
end

配列の要素を最初から順番に1つずつ取り出して変数に代入しながら処理を実行し、全ての要素を処理すると終了します。例えば曜日を並べる場合は次のように書きます。

youbi=[“月”,”火”,”水”,”木”,”金”,”土”,”日”]
for y in youbi do
puts(“#{y}曜日です”)
end

月曜日です
火曜日です
水曜日です
木曜日です
金曜日です
土曜日です
日曜日です

配列とeachメソッド

同じ処理を eachメソッドというものを使ってこのようにできます。

youbi=[“月”,”火”,”水”,”木”,”金”,”土”,”日”]
youbi.each do |y|
puts(“#{y}曜日です”)
end

配列の要素を削除する

n番目の要素を削除するには、

配列名.delete_at(n-1)

と入力します(・ω・)ノ

suuzi=[1,2,3,4,5]
suuzi.delete_at(3)
puts(suuzi)

1
2
3
5

全ての要素を削除するにはclearメソッドを使います。

配列名.clear

配列の要素を並べ替える(ソート)

sortメソッドを使います。数値は小さい順、文字列はアルファベット順になります(・ω・)ノ

配列名.sort

数値と文字列をそれぞれソートしてみます。

suuzi=[2,4,3,5,1]
mozi=[“bear”,”cellphone”,”apple”,”dress”]
kondou=[“2″,”3″,”apple”,”bear”,”1″]
puts(suuzi.sort)
puts(“—“)
puts(mozi.sort)
puts(“—“)
puts(kondou.sort)

1
2
3
4
5

apple
bear
cellphone
dress

1
2
3
apple
bear

ちなみに数値と文字列が混同した配列は数値を文字列にしておかないとsortメソッドが使えません(・ω・)ノ

また、sortメソッドは並び替えた要素を出力するだけですので、配列の要素はそのままです。sortした配列から指定した要素を取り出すには、一度sortした配列を別の配列に代入し、その配列から要素を取り出します。

なお、配列sortsuuziの並び替え後の数値は小さい順に並んでいますので、最小値は配列の一番初めの要素 sortsuuzi[0] となり、最大値は sortsuuzi[-1] となります。

suuzi=[1,10,2,9,3,8,4,7,4,6,5]
sortsuuzi=suuzi.sort
puts(“ソート後の配列”)
puts(“—“)
puts(sortsuuzi)
puts(“—“)
puts(“最小値は#{sortsuuzi[0]}、最大値は#{sortsuuzi[-1]}です。”)

ソート後の配列

1
2
3
4
4
5
6
7
8
9
10

最小値は1、最大値は10です。

配列は以上になります(ノ)・ω・(ヾ)