どぼじょのIT学習ブログ

高専卒土木女子がIT業界を目指してお勉強。

Ruby入門 part5

Ruby入門の続きです!

目次

1.配列

1-1. 配列オブジェクト

配列オブジェクトを使うと、複数の変数をまとめて扱うようなことができます💡
配列オブジェクトは以下のように簡単に書くことができます。

[オブジェクト1, オブジェクト2, オブジェクト3, …]

この、ひとつひとつのオブジェクトのことを配列の「要素」と呼びます。
また、先頭の要素から順に、0,1,2,…と数えることができます。例えば配列の5つめのオブジェクトを指定したいときは、配列オブジェクトの4を指定します。この数字を「インデックス」といいます🔖
インデックスは、-1は一番最後の要素、-2は最後から2番目の要素を指します。
具体的に扱ってみます!

gist.github.com

結果は以下のとおりです。
f:id:mistyrinth:20181115102626p:plain
こんな感じで使っていけます〜!

また、既存の配列の任意の要素に対してオブジェクトを代入することもできます。

配列オブジェクト名[インデックス] = オブジェクト

先程の例でarray[2] = "石川さん"とすると、"長野さん"だった値は"石川さん"に変わります。

1-2. Arrayクラス

配列オブジェクトはArrayクラスが元になっています。
先程の[オブジェクト1, オブジェクト2, ...]の書き方は、以下のArrayメソッドの省略形でした💡

Array[オブジェクト1, オブジェクト2, ...]

クラスメソッドのnewを使った書き方もあります。
Array.new()を使って、以下のような様々な書き方ができます✨

Array.new(要素数, 代入するオブジェクト)

例えばarray = Array.new(100,"dog")なら、100個の要素(変数)が作成され、dogというオブジェクトが代入されます! 笑
ここでの注意点は、100個の変数にひとつひとつdogが代入されるわけではなく、100個の変数が全て1つの同じdogを参照している点です。
出力する文字列が同じなので分かりにくいですが、要素100個に対して、参照されるオブジェクトは1つです。
あとは、要素数だけを指定した場合、変数はオブジェクトが代入されていないため、nilとなります。

今度は、要素を複数個作ったら同じ数だけオブジェクトも作られる書き方です。

Array.new(要素数) {代入するオブジェクト}

つまりarray = Array(100){"dog"}にすると、変数が100個作られて、それぞれに対応するdogというオブジェクトが作られます💡
変数が100個あり、それに対応する100個のdogはそれぞれ別のdogということですね。

最後に、配列の複製です。

Array.new(配列オブジェクト名)

配列そのものを複製することができます!

例えば先にfirstarray = ["apple", "orange", "grape"]という配列オブジェクトがあったとします。
ここでsecondarray = Array.new(firstarray)とすると、secondarrayの各要素はfirstarrayと同じです!
ただし要素の参照元となるオブジェクトはfirstarrayと同一であるため、オブジェクトの数が2倍に増えるわけではないです。

1-3. 配列のサイズの取得

既存の要素の長さを取得するにはlengthメソッド(別名:sizeメソッド)を使います。
また、nilを除いた要素の長さを取得するために、以前(Ruby1.8くらいまで)はnitemsというメソッドがありましたが、1.9.1で廃止されたようです😶出典はRuby1.9.1のリリース記事です。
Ruby 1.9.1 リリース!!
リンク先から更に変更点のページ(英語)に飛べるのですが、そこにはArray#nitems was removed (use count {|i| !i.nil?})と書いてあります!
なのでそっちで代用してみます。試しに、nilを含めて20個、nilを除いて15個の要素を持つ配列オブジェクトを作ってみました💪

gist.github.com

結果は以下のとおりです。
f:id:mistyrinth:20181116014031p:plain

1-4.配列に対する繰り返し

for文に配列オブジェクトを使ったり、配列オブジェクトにeachメソッドを使用することができます💡
for文やeachメソッドについては、Ruby入門 part4をご参照ください😊

for文に配列オブジェクトを使う時は、以下のようになります。といっても特別な書き方ではなく、見た目はfor文そのままです笑

for 変数 in 配列オブジェクト do
    実行する処理1
    実行する処理2
end

さらに、以下のように配列オブジェクトにもeachメソッドを使えます!

配列オブジェクト.each{|変数|
    実行する処理1
    実行する処理2
}

それぞれ以下のように使うことが出来ます!
gist.github.com
実行結果は以下のとおりです。
f:id:mistyrinth:20181119201011p:plain

1-5. 要素に別の配列オブジェクトを代入

配列オブジェクトの各要素には、文字列や数値のほかにも配列オブジェクトを入れることもできます。入れ子のような形になりますね🙂

次のような感じで使うことができます。
gist.github.com
結果は以下のとおりです。
f:id:mistyrinth:20181119202112p:plain

本日は以上です!