Vol.5 ~Arrayクラス~

○ コレクションクラス

データの集合を扱うための形式で、オブジェクト指向言語では 「コレクション」 または 「コンテナ」 と呼ばれる。
Ruby では Array クラスと Hasu クラスという 2 種類のコレクションがクラスとして用意されている。

○ Array クラス

オブジェクトの並び順を保持したコレクションクラスで、一般に配列と呼ばれるもの。
0 から始まるインデックスを使ってオブジェクトを格納する。

● 配列の生成

シンタックスシュガー 

>> array = Array.[]
=> []

>> array = []
=> []

new による記述 

>> array = Array.new
=> []

配列には、様々なオブジェクトの混在が可能

>> array = [1, "two", ['one', 2], :four]
=> [1, "two", ['one', 2], :four]

● 配列へのアクセス

配列の要素にアクセスするには、インデックスを使用する。 

>> a = [1, 2, 3, 4, 5, 6]
=> [1, 2, 3, 4, 5, 6]
>> a[0]
=> 1
>> a[-1]   # 負のインデックスは末尾から
=> 6

インデックス 「0(先頭)」と「-1(末尾)」については、メソッドが用意されている

>> a.first
=> 1
>> a.last
=> 6

● 要素の追加

要素を追加するには、メソッド「push」または、メソッド「<<」を使用する。

>> array.push 5
=> [1, "two", ['one', 2], :four, 5]
>> array << "six"
=> [1, "two", ['one', 2], :four, 5, "six"]

● 要素の数

要素の数を調べるには、メソッド「length」または、メソッド「size(lengthのエイリアス(別名))」を使用する。

>> array.lenght
=> 6
>> array.size
=> 6

● 要素の探索

条件にあった要素を抽出(選択)するには、メソッド「select」を使用する。

>> x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
>> x.select{|e| e % 2 == 0} # 偶数を抽出
=> [2, 4, 6, 8]

条件に合わない要素を抽出するには、メソッド「reject」を使用する。

>> x.reject{|e| e % 2 == 0} # 偶数以外を抽出
=> [1, 3, 5, 7, 9]

● 要素のソート

要素を並び替えるには、メソッド「sort」を使用する。

>> a = [6, 5, 4, 3, 2, 1]
=> [6, 5, 4, 3, 2, 1]
>> b = a.sort
=> [1, 2, 3, 4, 5, 6]

この操作では、元の配列(a)は変更されない。

>> a
=> [6, 5, 4, 3, 2, 1]

元の配列を変更するには、メソッド「sort!」を使用する。
メソッドの後ろに「!」がついているメソッドを「破壊的メソッド」という。

>> a.sort! # 破壊的メソッド
=> [1, 2, 3, 4, 5, 6]
>> a
=> [1, 2, 3, 4, 5, 6] # 元の配列が変更された

sortメソッドは要素同士を比較するため、異なるデータ型同士を比較するとエラーになる。

>> a = [2, "1"] # 数値型 2 と 文字列型 "1"
=> [2, "1"]
>> a.sort
ArgumentWrror:comparison of Fixnum with String Failed

こういった場合は、要素の型を文字列に統一してから比較を行う処理内容をブロックに記述する。

>> a.sort{|x, y| x.to_s <=> y.to_s} # 文字列変換メソッド to_s を使用
=> ["1", 2]

● 要素の削除

要素を削除するには、引数にインデックスを使用するメソッド「delete_at」を使用する。

>> a = ["one", "two", "three"]
=> ["one", "two", "three"]
>> a.letete_at(1)
=> "two"
>> a
=> ["one", "three"]

引数に要素を指定するメソッド「delete」でも削除可能。

>> a = ["1", "2", "1", "2"]
=> ["1", "2", "1", "2"]
>> a.delete("1")
=> "1"
>> a
=> ["2". "2"]

削除条件を指定するときは、メソッド「delete_if」をブロックを使用する

>> x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
>> x.delete_if{|e| e % 2 == 0} # 偶数を削除
=> [1, 3, 5, 7, 9]


自宅サーバーWebRing << 前 |ID=231 |次 >> 乱移動前後5表示サイト一覧