Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
19
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

はじめに

この記事は書籍「プロを目指す人のためのRuby入門」に掲載できなかったトピックを著者自らが紹介するアドベントカレンダーの7日目です。
本文に出てくる章番号や項番号は書籍の中で使われている番号です。

この記事では配列を使ったキューとスタックを説明していきます。

必要な前提知識

「プロを目指す人のためのRuby入門」の第4章まで読み終わっていること。

配列を使ったキューとスタック

配列はキューやスタックとして使うこともできます。

キュー

キューは最初に入れたデータを最初に取り出すデータ構造です。このデータ構造はFIFO(First In First Out、先入れ先出し)と呼ばれることもあります。イメージ的には遊園地の入り口に並んだお客さんが順番に中へ入っていく様子を想像するとわかりやすいかもしれません。

IMG_8205.JPG

配列をキューとして使う場合は、要素の追加にpushメソッドを(<<でも可)、要素の取得と削除にshiftメソッドを使います。

queue = []

# 要素を末尾に追加する
queue.push '田中'
queue.push '鈴木'
queue #=> ["田中", "鈴木"]

# 先頭の要素を取得して削除する
queue.shift #=> "田中"
queue.shift #=> "鈴木"
queue       #=> []

スタック

スタックは最後に入れたデータを最初に取り出すデータ構造です。このデータ構造はLIFO(Last In First Out、後入れ先出し)と呼ばれることもあります。イメージ的には洗ったお皿を棚にしまい、そのお皿を棚から出す様子を想像するとわかりやすいかもしれません。

IMG_9648.JPG

配列をスタックとして使う場合は、要素の追加にpushメソッドを(<<でも可)、要素の取得と削除にpopメソッドを使います。

stack = []

# 要素を末尾に追加する
stack.push '大きい皿'
stack.push '小さい皿'
stack #=> ["大きい皿", "小さい皿"]

# 末尾の要素を取得して削除する
stack.pop #=> "小さい皿"
stack.pop #=> "大きい皿"
stack     #=> []

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

fruits = ['melon', 'orange']
fruits.unshift 'apple'
fruits #=> ["apple", "melon", "orange"]

参考:prependとappend(Ruby 2.5)

Ruby 2.5ではunshift/pushのエイリアスメソッドとしてprepend/appendが追加されました。
Ruby 2.5以降であればこちらを使っても構いません。

array = [3, 4]
array.prepend(1, 2) #=> [1, 2, 3, 4]
array               #=> [1, 2, 3, 4]

array = [1, 2]
array.append(3, 4)  #=> [1, 2, 3, 4]
array               #=> [1, 2, 3, 4]

次回予告

次回は配列の便利メソッドをあれこれ紹介します。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
19
Help us understand the problem. What are the problem?