【初心者必見】Ruby配列の初期化の方法まとめてみた!

こんにちは! フリーエンジニアの長瀬です。

よく使用するデータ型の一つに「配列」があると思います。

ただ、配列の初期化って種類が多くて、どうやれば良いのか迷ってしまうことがあります。

そこで本記事では、rubyの配列の初期化について

・[] ・Array[] ・Array.new()

という基本的な内容から、

・ 二次元配列
・ ランダムに初期値を設定する
・ 連番
・ insert (指定した箇所に数値を挿入)
・ map (各要素をブロックに渡し、戻り値を配列として返す)
・ select (条件で要素を絞り込む)
・ uniq (数値の重複をなくす)

といった応用的な内容についても解説していきます。

基本的な配列の初期化

柔軟な書き方ができるRubyですが、その柔軟な書き方のおかげで、配列の初期化の方法は三つあります。

[]

array = [] # []
array = [1,2,3] # [1,2,3]

まずご紹介するのは、「[]」の中に初期化したい数字を入れていく方法です。

基本的な定義方法で、理由がない限りはこの方法を使用します!

何も数字を入れずに定義すると、空の配列ができあがるので、空の配列を作りたい時にも使用できます!

Array[]

Array[] # []
Array[1,2,3]

上で紹介した方法にArrayを付け足したバージョンです。

お分かりの通り、Arrayが無駄な感じがするので、使用することはあまりありません。

Array.new()

Array.new(3) # [nil, nil, nil]

newメソッドを使用して、インスタンスを作成するイメージで作成することができるのがこのメソッドです。

定義された配列には、引数に与えられた数字の長さ分のnilが入ります。

そのため長さを指定して配列を定義したい時に使用します!

発展的な配列の初期化

それでは便利な、発展的な配列の初期化を実装する方法について解説していきます!

二次元配列

他の言語では一般的な二次元配列の定義ですが、rubyに二次元配列の初期化機能はありません。

そのため、自らメソッドを実装する必要があります。

例えば3×3の二次元配列を定義したい場合は以下のようなメソッドが考えられます。

Array.new(3).map{Array.new(3)}
# [[nil, nil, nil], [nil, nil, nil], [nil, nil, nil]]

書く配列に対してmapメソッドで、それぞれに配列の定義をしていきます。

上記の例の場合、map{Array.new(3)}の3の次の引数に何も渡していないので、nilになりますがもちろん自分で初期値を設定することもできます。

Array.new(3).map{Array.new(3.0)}
#[[0, 0, 0], [0, 0, 0], [0, 0, 0]]

この場合は0を引数として渡したので、すべての要素が0として初期化されました。

また、9に数値を変更してみると

Array.new(3).map{Array.new(3,9)}
#[[9, 9, 9], [9, 9, 9], [9, 9, 9]]

ランダムに初期値を設定する

すべの要素の初期値をランダムに決定したい場合は以下のようにします。

Array.new(3).map{Array.new(3){rand(1..9)}}
#[[7, 5, 9], [7, 7, 1], [1, 7, 5]] 
Array.new(3).map{Array.new(3){rand(1..9)}}
#[[6, 7, 4], [8, 9, 4], [3, 9, 1]]

ちなみに、よくあるミスとしてArray.new(3)の次の引数としてrandの値を渡すと

Array.new(3).map{Array.new(3,rand(1..9))}
#[[4, 4, 4], [1, 1, 1], [3, 3, 3]]
Array.new(3).map{Array.new(3,rand(1..9))}
#[[5, 5, 5], [1, 1, 1], [1, 1, 1]]

このように、同じ配列内の数値はすべて同じになります。

ランダムな数値の扱い方はこちらで詳しく解説してありますので、自信のない方は一読することをおすすめします。

【Ruby入門】randomを使いこなす!【数値、文字列、array、secure】
更新日 : 2019年8月2日

連番

1から5までの配列を作りたいなどの、連番で配列を作りたい場面があると思います。
Rubyはそんな時でも簡単に定義することができます。

サンプルコードではmapメソッドを使用していますが、本記事の後半に解説がありますので使い方がわからない場合は先に読んでおくことをおすすめします。

 (1..5).to_a
# [1,2,3,4,5]

また2から9までなら

(2..9).to_a
#[2, 3, 4, 5, 6, 7, 8, 9]

偶数列、奇数列

(1..10).map{|i| i*2}
#[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
(1..10).map{|i| i*2 +1}
#[3, 5, 7, 9, 11, 13, 15, 17, 19, 21]

範囲の扱い方はこちらで詳しく説明してありますので、理解に自信のない方は一読することをおすすめします。

配列の便利なメソッド

配列の初期化方法がわかったところで、配列についての便利なメソッドを紹介します。

insert (指定した箇所に数値を挿入)

insertメソッドを使えば、任意の箇所に数値を挿入できて便利です。

array = (1..3).to_a
puts array 
puts array.insert(0,99999)

[実行結果]

1
2
3
99999
1
2
3

このように0番目(先頭)に99999を追加できました。

map (各要素をブロックに渡し、戻り値を配列として返す)

mapメソッドを使えば、配列の各要素に演算を加えて新しい配列を作ることができます。

def map_test
  array = (1..5).to_a
  array.map do |a|
    a*3
  end
end

puts map_test

[実行結果]

3
6
9
12
15

一見、eachメソッドと同じように見えますが、mapの場合はブロックに渡した戻り値で配列を作ります。

上記のコードのmapのところをeachに置き換えると

def map_test
  array = (1..5).to_a
  array.each do |a|
    a*3
  end
end

puts map_test

[実行結果]

1
2
3
4
5

このように、結果が変わります。

というのも、eachの場合はそのままレシーバー自身を戻り値としてを返すからです。

select (条件で要素を絞り込む)

条件で絞り込んで配列から、新しい配列を作成したいときはselectメソッドを使うと簡単に実現できます。

array = (1..12).to_a
puts array.select {|a| a % 3 ==0}

[実行結果]

3
6
9
12

このように、3で割ってあまりが0(3の倍数)だけに絞りこめました。

uniq (数値の重複をなくす)

配列の中身の数値の重複をなくしたいときはuniqメソッドを使いましょう。

array = [1,1,2,3,5,8,13]
puts array.uniq

[実行結果]

1
2
3
5
8
13

重複していた、先頭の1が1つ消えた配列として出力されました。

関連記事


【Rubyの配列】基礎から発展までを網羅しました!
更新日 : 2018年9月4日

【ruby Array(配列)】6つの基本をすっきり解説で最短理解
更新日 : 2019年4月12日

【Ruby入門】ループ処理まとめ(for・times・while・each・upto・downto・step・loop)
更新日 : 2019年6月25日

【Ruby入門】Hash(ハッシュ)の基礎文法【コロン=シンボル】
更新日 : 2019年4月22日

逆引き!RubyHash便利メソッドまとめ【each/map/sort/key/merge】
更新日 : 2016年10月18日

【ruby Array(配列)】6つの基本をすっきり解説で最短理解
更新日 : 2019年4月12日

【Ruby入門】length,size,countの使い方まとめ
更新日 : 2019年4月24日

【Ruby入門】ファイル出力・入力まとめ【改行コード、CSV、配列】
更新日 : 2017年9月6日

まとめ

今回はrubyの配列の初期化方法について解説していきました!

rubyの配列は様々な方法で初期化を行うことができるということがわかっていただけたでしょうか。

本記事の内容をしっかりとマスターしておけば、基本的な配列の初期化は大丈夫です。

配列はプログラミングの基本なので、侍の配列に関する他の記事も読んで理解を深めてみてはいかがでしょうか?

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

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

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

長瀬来

長瀬来

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

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

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

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

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

趣味は語学、読書です。