4
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rubyのシンタックス勉強用(reject, delete_if, remove_all, clear)の挙動 [RUBY技術者認定試験...問題24, 31]

Last updated at Posted at 2019-09-24

基本説明

HashやArray(配列)クラスのオブジェクトのメソッドを複数学べる良問があったので共有します。

メソッッド名 説明 戻り値 対応オブジェクト 破壊的?
reject 要素の数だけ繰り返しブロックを実行、ブロックの戻り値が真の要素を除き、新しい配列(かハッシュ)を返す 偽になった新しい配列(かハッシュ) Array, Hash FALSE
delete_if 要素の数だけ繰り返しブロックを実行、ブロックの戻り値が真になった要素を削除 レシーバ自身 Array, Hash TRUE
delete 配列:引数と同じ要素を探して、すべて削除 / ハッシュ:引数(key)と同じkeyを探して、keyとvalueを削除 レシーバ自身, 要素見つからない場合はnil Array, Hash, String TRUE
remove HashやArray(配列)クラスにそんなメソッドは無い - -
remove_all HashやArray(配列)クラスにそんなメソッドは無い - -
clear 要素を全て削除する レシーバ自身 Array, Hash, String TRUE

オブジェクト自身(レシーバ)の内容を変えてしまうものを破壊的メソッドと呼ぶ。

例題1

出力結果が

{}

になる、過程は?(1〜5の中から、2つ選んでください)

h = {:foo => 1, :bar => 2}
# 1 : h.reject {|k,v| true} # NG
# 2 : h.delete_if {|k,v| true} # OK
# 3 : h.delete(:all) # NG
# 4 : h.remove_all # NG ERROR
# 5 : h.clear # OK
p h
  • rejectは非破壊メソッドなのでNG
  • delete(:all)と指定できないのでNG
  • remove_allなんてメソッドは無いのでNG
    • ActiveRecordでは削除系インスタンスメソッドとして存在します

RUBY技術者認定試験 公式ガイド (ITpro BOOKs) 157p 問題24より抜粋

例題2

出力結果が

[1, 3, 1, 3, 1, 3]

になる、過程は?(1〜5の中から、2つ選んでください)

ary = [1,2,3,1,2,3,1,2,3]

# 1:正解(破壊的メソッド)
# ary.delete(2)

# 2:正解(破壊的メソッド)
# ary.delete_if {|x| x == 2}

# 3 破壊的メソッドなら変わってた
# ary.reject {|x| x == 2}

# 4 エラー 存在しない
# ary.remove(2)

# 5 エラー 引数取らない ブロック処理するメソッド wrong number of arguments (given 1, expected 0) (ArgumentError)
# ary.reject(2)

p ary

実行結果は以下でサクッと試せます

Online Ruby Editor and IDE - Fast, Powerful, Free - Repl.it

参考

4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?