Rubyの配列、ハッシュテーブルを表現するArray、Hashクラスの使い方若手エンジニア/初心者のためのRuby 2.1入門(3)(1/4 ページ)

オープンソースのオブジェクト指向プログラミング言語「Ruby」の文法を一から学ぶための入門連載。最新版の2.1に対応しています。今回は、Arrayの基本操作、スタック/キューとしての使い方、さまざまなメソッド、Hashの基本的な使い方、連想配列のいろいろな初期化方法などについて。

» 2014年05月08日 18時00分 公開
[著:麻田優真、監修:山根剛司株式会社アジャイルウェア]

Rubyの組み込みライブラリとは

今回の主な内容


「若手エンジニア/初心者のためのRuby 2.1入門」のインデックス

連載目次

 前回の連載第2回記事「Ruby 2.1の基本構文/基本文法まとめ&Pryの使い方」では、Rubyの基礎と題して、変数とオブジェクト、定数、リテラル、式と演算子、制御構文について、主要なものを学習しました。ここまでの連載で、Rubyの基本的なプログラムが書けるようになったと思います。

 今回からは数回に分けて、Rubyの組み込みライブラリについて、ちょっとしたスクリプトを交えながら解説していきます。読み終わったころには、ライブラリを使ってさまざまなプログラムを書けるようになっていることでしょう。日々の作業の自動化などに、ぜひお役立てください。

 組み込みライブラリはRuby本体に含まれているため、特に何も意識することなく、すぐに使えます。

 今回は、ArrayクラスやHashクラスなど「配列」「コンテナー」「コレクション」「スタック」「キュー」「連想配列」「ハッシュ(テーブル)」を表現するものについて説明します。

※編集部注

本連載はRuby 2.1プログラミングの入門連載です。Ruby on Railsについて学びたい方は連載「開発現場でちゃんと使えるRails 4入門」をご覧ください。


「配列」を表現する「Array」クラスの基本的な使い方

 Arrayクラス(以下「Array」と略記)は、おそらくRubyで最もよく使われる「コンテナー」(複数のデータを集めて管理するためのクラス。「コレクション」とも呼ぶ)でしょう。単純に「配列」と呼ぶこともあり、直感的にはC言語の影響を受けた言語でいうところの配列と似ています。

Array#newなどで空のArrayオブジェクトを作成

 ここでは、前回同様、pryを使ってArrayの基本操作を学びます。まずは以下のコマンドを入力して、pryを起動しましょう。

$ pry

 まずは、空のArrayオブジェクトを作ってみます。

[1] pry(main)> array = []
=> []

 以下のようにして空のArrayオブジェクトを作ることもできます。

[2] pry(main)> array = Array.new
=> []

 いずれの場合も戻り値は空のArrayオブジェクトです。どちらの記法を使うかは、あなた自身の好みやプロジェクトの慣習に従うのが良いでしょう。

Array#push、<<演算子でオブジェクトの追加

 続いて、新しいオブジェクトをArrayオブジェクトに追加してみます。

[3] pry(main)> array.push(1)
=> [1]
[4] pry(main)> array << 2
=> [1, 2]
[5] pry(main)> array << "3"
=> [1, 2, "3"]

 「Array#push」は、Arrayオブジェクトに新しいオブジェクトを追加するためのメソッドです。また、3行目のように、「<<」演算子を使ってオブジェクトを追加することもできます。好みの分かれるところですが、筆者の経験上では、<<演算子を使うケースの方が多いようです。

 1行目と3行目で追加したオブジェクトは1、2といった整数ですが、5行目で追加したオブジェクトは"3"という文字列です。このように、Rubyの配列には好きな型のデータを追加できます。配列に含まれているオブジェクト全てが同じ型である必要はありません。

補足「メソッドの表記方法について」

 Rubyでは、例えばArrayクラスのpushメソッドを表現するために、Array#pushといった書き方をするのが慣例となっています。この連載においても、そのルールに倣って表現します。


Array#length、Array#sizeで要素数を取得する

 また、要素数を取得するためにはArray#length、もしくはArray#sizeを使います。

[6] pry(main)> array.length
=> 3
[7] pry(main)> array.size
=> 3

Array#atや[](角カッコ)でオブジェクトの参照

 では、Arrayオブジェクトに含まれるデータに実際にアクセスしてみましょう。C言語の影響を受けた言語のように[](角カッコ)を使うか、Array#atを用いてオブジェクトを取り出すことができます。角カッコを使う方が自然です。

[8] pry(main)> array[0]
=> 1
[9] pry(main)> array.at(1)
=> 2
[10] pry(main)> array[5]
=> nil

 Arrayオブジェクトのインデックスは0から始まり、もし範囲外のインデックスを指定した場合はnilが返ってきます。

インデックスに負の数を使える

 また、インデックスに負の数を使うと、「後ろから数えてn番目」のオブジェクトを取り出せます。

[11] pry(main)> array[-1]
=> "3"
[12] pry(main)> array[-2]
=> 2
[13] pry(main)> array[-3]
=> 1

 インデックスとして-1を指定すると、配列の最後尾にある"3"というオブジェクトを取得できます。-2を指定すると、"3"の前に位置する2が取得でき、同様に-3を指定すると1が取得できます。

インデックスの範囲を指定できる

 また、以下のように書くと、範囲を指定してオブジェクトを取り出すことができます。

[14] pry(main)> array [1..2]
=> [2, "3"]

Array#delete、Array#delete_atでオブジェクトの削除

 オブジェクトを取り除くためには、Array#delete、もしくはArray#delete_atを使います。これらのメソッドの戻り値は、削除された要素そのものです。

 Array#deleteはArrayオブジェクトを検索し、Array#deleteの引数と等しいオブジェクトを取り除きます。

 Array#delete_atは、引数に指定されたインデックスの要素を取り除きます。

[15] pry(main)> array.delete(1)
=> 1
[16] pry(main)> array.delete_at(0)
=> 2

 ここで、現在Arrayオブジェクトに含まれているオブジェクトを確認してみましょう。

 「array.delete(1)」によって1が取り除かれ、「array.delete_at(0)」によって、[2, "3"]の0番目のオブジェクト、すなわち2が取り除かれたので、残ったのは"3"だけになります。

[17] pry(main)> array
=> ["3"]

Array#clearでオブジェクトの全削除

 Arrayオブジェクトに含まれているオブジェクトを全て取り除きたいときは、Array#clearを使います。

[18] pry(main)> array.clear
=> []
[19] pry(main)> array
=> []
       1|2|3|4 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。