【Ruby入門】配列の基礎から応用的な使い方まとめ

Rubyの配列の使い方を理解したい
配列でよく使うメソッドを知っておきたい

配列はいくつもの値を格納できて便利ですが、初心者にとっては変数と使い勝手が違うので戸惑ってしまうかもしれません。

この記事では、できるだけ多く網羅できるように、Rubyの配列でよく使われる便利メソッドや活用法などをまとめました。

これらのメソッドや活用法が有効な場面で今後利用できるように、この記事を何度も読んで基本的な使い方を頭に入れておきましょう。

この記事はこんな人のために書きました。

  • 配列の使い方の基本を理解しておきたい方
  • 配列で使用できるメソッドを知っておきたい方

※この記事はRubyのバージョン2.5.1で動作確認しました。

前提知識:Ruby配列の基礎

そもそも配列とは

配列とは複数の値をまとめて管理したいときに使用します。例えば果物を入れる箱があって、その何にたくさんの種類の果物を詰め込みたいとき、配列では以下のように定義します。

通常の変数は1つの値のみしか代入できないのに対して、配列はこのように複数の値を代入することができます。

配列を定義するには、配列用の変数を定義し、[]の中にカンマ(,)区切りで文字列を格納しています。このように複数の値が格納された箱が配列となります。

配列の定義・出力

試しにターミナルでRubyの実行ファイル「array.rb」を作成し、以下のプログラムを記述してみましょう。

配列の内容を確認するには「p」または「puts」を使用します。「p 配列」のように配列名を指定することで、プログラム実行時に配列の内容を出力することができます。

では、以下のコマンドでarray.rbを実行してみましょう。

配列の内容が出力されたら成功です。

そんな配列について、「配列の初期化」「配列の要素の取得」「配列のループ」「配列の出力」などの基本に関しては以下の記事で詳しく解説しています。

配列やハッシュの便利メソッド

ここでは、配列やハッシュで使える便利なメソッドについて紹介していきます。ターミナルで「array.rb」の内容を修正してコマンド「ruby array.rb」でプログラムを実行して動作を確認してみましょう。

プログラム中の「# 出力結果」以降は実行時に出力される結果となります。

RubyリファレンスでもRubyで使用できる配列のメソッドが網羅されています。

繰り返し処理

ここではeachメソッドでの繰り返し処理について解説していきます。

each(ブロックに要素を繰り返し渡す)

eachメソッドを使用することにより、配列オブジェクトに格納されている要素を順番に取り出すことができます。

「each |変数|」で指定した変数に配列の要素を順番に格納されます。格納された配列の要素の値を順番に参照することができます。

each(ブロックにキーと値を繰り返し渡す)

eachメソッドはハッシュのキーと値をそれぞれ順番に取り出すこともできます。ハッシュのキーと値をそれぞれ取り出すには「each |キー, 値|」のように、キーと値を取得するための変数を指定する必要があります。

each_key(ブロックにハッシュのキーだけ繰り返し渡す)

ハッシュのキーのみ取得したい場合はeach_keyメソッドを使用します。使い方はeachメソッド同様に「each |キー|」でキーを取得する変数にハッシュのキーが順番に格納されます。

each_value(ブロックにハッシュの値だけ繰り返し渡す)

ハッシュの値のみ取得したい場合はeach_valueを使用します。使い方はeachメソッド同様に「each |値|」で値を取得する変数にハッシュの値が順番に格納されます。

each_slice(要素数ごとに分割する)

each_slice(要素数)とすることで、配列を指定した数で分割することができます。分割した要素は「|変数|」で指定した変数に順番に取得されます。

ここでは4を指定したので、4つの要素ごとに分割しています。

each_cons(要素数ごとに1つずつずらして分割する)

each_cons(要素数)とすることで、指定した要素ごとに値を1ずつずらして分割します。分割した要素は「|変数|」で指定した変数に順番に取得されます。

each_with_object (ブロックに値を渡して新たな配列を作成)

each_with_objectを使えば配列やハッシュのオブジェクトから条件を指定して新たな配列を作成できます。

このプログラムでは、each_with_objectメソッドを使用して、取得した要素の演算結果を順番にpickedに格納しています。

ハッシュも同様に結果を格納して新たな配列に格納しています。

reverse_each(ブロックに末尾から要素を繰り返し渡す)

reverse_eachメソッドを使用することにより、配列の末尾の要素から順番に取り出すことができます。

each_index(ブロックにインデックスを繰り返し渡す)

配列のインデックスのみ取得したい場合はeach_indexメソッドを使用します。each同様要素を順番に取得しますが、ブロックで指定した変数には配列のインデックスが格納されます。

each_with_index(ブロックに要素とインデックスを繰り返し渡す)

配列の値とインデックス番号も同時に取得したい場合はeach_with_indexメソッドを使用します。

ブロックのaには、配列の要素が代入され、iにはインデックス番号が代入されています。

map, map!(ブロックが返す値からなる配列を作成)

mapメソッドは、配列の要素数分繰り返し処理を実行します。要素ごとにブロックの処理が実行され、ブロックの戻り値を集めた配列を返します。

mapメソッドについては以下の記事でも詳しく解説しています。

mapメソッドの書き方:

select, select!(ブロックが真を返す要素からなる配列を作成)

ブロックの条件式が真の場合の要素のみ取得したい場合はselectメソッドを使用します。

このプログラムではsizeメソッドを使用して各要素の文字数が4以上の場合は真となります。

collect, collect!(ブロックが返す値からなる配列を作成)

ブロックの処理結果を配列で取得したい場合はcollectメソッドを使用します。

このプログラムでは、各要素を3倍にした結果を取得しています。

reject(ブロックが偽を返す要素からなる配列を作成)

rejectメソッドはブロックの条件式が偽の場合の要素を返します。

このプログラムでは、値を3で除算した結果が0以外の要素を取得しています。

変換、入れ替え

sort, sort!(要素のソート)

sortメソッドを使用することにより、配列の要素を並べ替えることができます。

また、「array.sort {|a, b| a <=> b }」のようにブロックに条件式を指定して並べ替えることも可能です。

sort_by, sort_by!(ブロックの戻り値でソートする)

sort_byメソッドを使用することにより、ブロックの結果によって並べ替えを行うこともできます。

このプログラムではsizeメソッドを使用して、文字数の少ない順に並べ替えをしています。

transpose(行と列の入れ替え)

transposeメソッドを使用することにより、多次元配列の行と列を入れ替えることができます。

要素の取得

first(最初の要素を取り出す)

firstメソッドを使用することにより、配列の最初の要素を取得することができます。

メソッドに引数を指定して、指定した要素数分、最初の要素から取り出すこともできます。

last(最後の要素を取り出す)

lastメソッドを使用すれば、配列の最後の要素を取り出すことができます。

firstメソッド同様引数を指定することにより、最後の要素から指定した要素分取り出すこともできます。

slice(指定の位置や範囲の要素を取り出す)

sliceメソッドを使用することにより、指定したインデックス番号の要素数と取り出せます。

サンプルでは、要素番号1(配列は要素番号0から)を指定していますので、”Ruby”が取得できました。

fetch(指定の位置や範囲の要素を取り出す)

fetchメソッドはslice同様指定した位置の要素を取り出しますが、サンプルのように範囲外を指定した場合はIndexErrorを返します。

sample(要素をランダムに返す)

sampleメソッドを使用すると、配列の値をランダムで返します。

そのため、実行するたびに取得できる値が異なります。

assoc(キーを元に配列の配列から配列を取り出す)

キーを元に配列の中から配列を取り出したい場合はassocメソッドを使用します。

ここではキーに”Ruby”を指定しているため、[“Ruby”, “Rails”]が取得できました。

要素の作成または更新

drop(先頭からいくつかの要素を除いた配列を作成)

dropメソッドを指定すると、指定した位置以降の要素を取り除いた配列を作成できます。

ここでは引数に2を指定しているため、先頭から2番目までの要素を除いた配列が作成されます。

fill(指定した値で配列を満たす)

fillメソッドは、指定した引数の値で配列の要素分値を置き換えます。

ここでは、引数に”japan”を指定しているため、元配列の要素数分の値が”japan”に置き換わります。

replace(自身を変更する)

replaceメソッドを指定すると、引数で指定した値に配列が置き換わります。

replaceは元の配列オブジェクト自身がreplaceで指定した値に置き換わる破壊的メソッドになります。

reverse, reverse!(要素の順番を反転させる)

reverseメソッドを使用すると配列の要素の順番が反転されます。

shuffle, shuffle!(要素をシャッフルする)

shuffleメソッドを使用すると、配列の全要素がランダムに置き換えられた新しい配列が作成されます。

zip(複数の配列の要素の組み合わせを作る)

複数の配列を組み合わせて配列の配列を作成したい場合はzipメソッドを使用すると便利です。

実行結果のように足りない要素はnilで埋められます。

要素の追加

unshift(先頭に要素を追加)

先頭に配列の要素を追加したい場合はunshiftメソッドを使用します。

引数に”Swift”を追加しているため、配列の先頭に”Swift”が追加されているのがわかりますね。

push(末尾に要素を追加)

pushメソッドはunshiftとは異なり配列の末尾に値を追加します。

引数に”Swift”を追加しているため、配列の末尾に”Swift”が追加されているのがわかりますね。

concat(末尾に配列を結合)

concatメソッドを使用すると、配列の末尾に引数で指定した配列が追加されます。

配列の配列として作成されるのではなく、1つの配列として末尾に配列要素が追加されます。

<<(末尾に要素を追加)

「<<」で値を指定することでも配列の末尾に値を追加することができます。

insert(指定した位置に要素を追加)

配列の指定した位置に要素を追加したい場合はinsertメソッドを使用すると便利です。

「insert(位置, 値)」のように指定します。

ここでは第一引数に1を指定したため、配列のインデックスの1番目に指定した値”Swift”が追加されます。

join(要素を結合した文字列を作成)

配列から1つの文字列を作成したい場合はjoinメソッドを使用します。

joinメソッドの引数には区切り文字を指定します。ここでは区切り文字にカンマ「,」を指定したので、カンマ区切りの文字列が作成されました。

要素の削除

shift(先頭の要素を取り除いて返す)

先頭の要素を取り除きたい場合はshiftメソッドを使用します。shiftメソッドは配列のオブジェクト自身が変更されます。

pop(末尾の要素を取り除いて返す)

末尾の要素を取り除きたい場合はpopメソッドを使用します。popメソッドは配列のオブジェクト自身が変更されます。

uniq, uniq!(重複する要素を削除)

重複する値を取り除きたい場合はuniqメソッドを使用します。

ここでは値”Ruby”が重複しているので、重複分が取り除かれた配列が作成されていることがわかります。

compact, compact!(nilの要素を削除)

配列の値がnilだったら削除したい場合はcompactメソッドを使用します。

実行結果のとおりnilが取り除かれていることがわかります。

delete(要素を削除)

指定した要素のみ削除したい場合はdeleteメソッドを使用します。

deleteメソッドの引数に指定した”Ruby”が取り除かれていることがわかります。deleteメソッドは配列のオブジェクト自身が変更されます。

delete_at(指定した位置の要素を削除)

指定した配列の位置の要素を削除したい場合はdelete_atメソッドを使用します。

delete_atメソッドの引数に位置を指定することで、配列の位置の要素が削除されます。delete_atメソッドは配列のオブジェクト自身が変更されます。

clear(配列を空にする)

配列の要素を全て削除して空にしたい場合はclearメソッドを使用します。

カウント

length(要素の数を返す)

単純に配列の要素数を調べたい場合はlengthメソッドを使用します。lengthにはarrayクラスとstringクラスの二種類があります。

size(要素の数を返す)

sizeはlengthメソッドと同じ結果を返します。sizeにはarrayクラスとstringクラスの二種類があります。

見た目的にはsizeメソッドのほうがソースコードを確認したときに、何をしていたかわかりやすい記述になります。

count(指定の要素の数を数える)

配列の中に同じ値がいくつあるか調べたい場合はcountメソッドが便利です。

引数に値を指定することで、その値がいくつかるかを取得できます。

調査

empty?(配列が空かどうか調べる)

配列の中身が空かどうか確認したい場合はempty?メソッドを使用します。

配列の空の場合はtrue、空ではない場合はfalseを返します。

include?(要素が含まれるか調べる)

配列に指定した要素が含まれているか確認したいときはinclude?メソッドを使用します。

指定した引数が配列の要素に含まれていればtrue、含まれていない場合はfalseを返します。

any? (最低1つでも条件を満たすか調べる)

配列の中に1つでも条件を満たす要素が含まれているか調べるにはany?メソッドを使用します。

このプログラムでは値が2より大きい要素が含まれていた場合、trueを返しています。

all? (すべての要素が条件を満たすか調べる)

配列の要素が全て指定した条件に満たしているか確認したい場合はall?メソッドを使用します。

条件が全て満たしている場合はtrue、満たしていない場合はfalseを返します。

四則演算、論理演算

&(積集合)

&(積集合)は2つの配列の積集合を作成します。2つの配列の要素から一致する要素を取得して、新しい配列が作成されます。

*(配列の内容を繰り返した配列を作成)

*(乗算)を使用すると、同じ要素を繰り返した配列が作成されます。

ここでは5で乗算しているため、同じ要素の内容を5回繰り返した配列が作成されます。

+(配列どうしを連結)

+(加算)を使用すると、配列同士を連結することができます。

-(差集合)

減算(-)を使用すると、重複している要素が取り除かれた配列が作成されます。

|(和集合)

|を配列で使用すると、重複している要素が取り除かれた配列が作成されます。

Rubyの配列を体系的に学びたい方に

この記事は今更聞けない!Rubyの配列とは??基礎から発展まで!の一部となります。
この記事を読むことで、Rubyの配列の内容を体系的に学ぶことができます。
Rubyの配列の習得に必要な情報を一つにまとめているので、効率よくRubyを習得したい方は是非ごらんください。

まとめ

いかがでしたでしょうか?

この記事では、配列やHashのメソッドや活用法を網羅しました。

どのメソッドや活用法も配列、Hashを扱っていく上で必ず必要になってくるので、1つ1つの挙動を把握しておいてください。

もし配列、Hashのメソッドや活用法について忘れてしまったらこの記事を確認してくださいね!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

長瀬来

長瀬来

Unityを使ったiOSアプリのリリース、フリマサイト運営の経験があります。

経験した言語はC、C#、Javascript、R、Python、Ruby、PHPなど

言語が好きで、英語や中国、ドイツ語を勉強しました。
将来的には海外で生活したいです。

現在はRuby on Rails5やCocos2dxの勉強を主にしています。

ライターとしては
できるだけ初心者にわかりやすい文章になるように心がけています。

趣味は語学、読書です。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説