言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Ruby辞典

  1. トップページ
  2. Ruby辞典
  3. 配列.push / pop / shift / unshift

配列.push / pop / shift / unshift

対応: Ruby 1.8(2003)

配列の末尾または先頭に要素を追加・削除するメソッドです。スタックやキューの実装にもよく使われます。

構文

# 末尾に1つ以上の要素を追加します。
配列.push(要素)
配列.push(要素1, 要素2, ...)
配列 << 要素  # push の糖衣構文

# 末尾の要素を取り出して返します。
配列.pop
配列.pop(n)  # n個まとめて取り出します。

# 先頭の要素を取り出して返します。
配列.shift
配列.shift(n)

# 先頭に1つ以上の要素を追加します。
配列.unshift(要素)
配列.unshift(要素1, 要素2, ...)

メソッド一覧

メソッド概要
push(elem)配列の末尾に要素を追加し、配列自身を返します。破壊的メソッドです。
<< elem『push』と同じ動作をします。チェーンして複数の要素を追加できます(例: 『arr << 1 << 2』)。
pop配列の末尾の要素を取り出して返します。配列の長さが1減ります。
pop(n)末尾からn個の要素を配列として取り出して返します。
shift配列の先頭の要素を取り出して返します。残りの要素は前にずれます。
unshift(elem)配列の先頭に要素を追加し、配列自身を返します。

サンプルコード

sample_array_push_pop_shift_unshift.rb
members = ["綾波レイ", "碇シンジ"]

# push で末尾に追加します。
members.push("惣流アスカ")
puts members.inspect  # ["綾波レイ", "碇シンジ", "惣流アスカ"]

# << でも追加できます(チェーン可能)。
members << "葛城ミサト" << "渚カヲル"
puts members.inspect  # ["綾波レイ", "碇シンジ", "惣流アスカ", "葛城ミサト", "渚カヲル"]

# pop で末尾から取り出します。
popped = members.pop
puts popped    # 渚カヲル
puts members.inspect  # ["綾波レイ", "碇シンジ", "惣流アスカ", "葛城ミサト"]

# shift で先頭から取り出します。
first = members.shift
puts first          # 綾波レイ
puts members.inspect  # ["碇シンジ", "惣流アスカ", "葛城ミサト"]

# unshift で先頭に追加します。
members.unshift("綾波レイ")
puts members.inspect  # ["綾波レイ", "碇シンジ", "惣流アスカ", "葛城ミサト"]

# キュー(FIFO)の実装例です。
queue = []
queue.push("綾波レイ")
queue.push("碇シンジ")
queue.push("惣流アスカ")
puts queue.shift  # 綾波レイ(先に入れた人が先に出る)
puts queue.shift  # 碇シンジ
ruby array_push_pop_shift_unshift.rb
["綾波レイ", "碇シンジ", "惣流アスカ"]
["綾波レイ", "碇シンジ", "惣流アスカ", "葛城ミサト", "渚カヲル"]
渚カヲル
["綾波レイ", "碇シンジ", "惣流アスカ", "葛城ミサト"]
綾波レイ
["碇シンジ", "惣流アスカ", "葛城ミサト"]
["綾波レイ", "碇シンジ", "惣流アスカ", "葛城ミサト"]
綾波レイ
碇シンジ

概要

これらのメソッドはすべて元の配列を直接変更する破壊的メソッドです。『push / pop』の組み合わせでスタック(LIFO)を、『push / shift』の組み合わせでキュー(FIFO)を実装できます。

『<<』演算子は最もよく使われる配列追加の記法で、メソッドチェーンで複数の要素を続けて追加できます。空の配列から『pop』や『shift』を呼び出すと、例外ではなく『nil』が返ります。空配列チェックが必要な場合は事前に『empty?』で確認してください。

任意の位置に挿入・削除するには『insert / delete』を、要素の存在確認には『include?』を使用してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。