1
0

More than 3 years have passed since last update.

盲点rubyのメソッドdeleteのそれぞれ

Last updated at Posted at 2020-03-14

ルビーのシルバー勉強中に盲点だったところが見つかりました。

それはdeleteメソッド

deleteメソッドの挙動について今回は記事をあげたいと思います。

まずdeleteメソッドはarray、string、hashそれぞれのクラスで使えるメソッドです。

Array

まずはarrayクラスのdeleteメソッドの動き

deleteメソッドは引数で与えた値が一致したものも全て削除します。

array = [1,2,3,4,5,1,2,3,4,5]
p array.delete(3)
3
p array
[1,2,4,5,1,2,4,5]

上記のようにdeleteメソッドを使ったタイミングで返ってくる値は削除する対象の値が返ってきます。

そして破壊メソッドなので3が削除されています。

私は、deleteメソッドは他stringやhashも動きそんなに変わらないだろうと思っていました。

そして、模擬問題をとているときに間違えてしまい、
あれ?となったのです。

それはstringのdeleteメソッドの問題でした。

String

string = '1234512345'
p string.delete('3')

さてこのとき何が返ってくるか?

正解は

string = '1234512345'
p string.delete('3')
"12451245"

またもう一度stringを呼び出すとどうなるか?

string = '1234512345'
p string.delete('3')
"12451245"
p string
"1234512345"

というわけで破壊メソッドではないんですね!
もちろんdelete!で破壊メソッドとなります。

string = '1234512345'
p string.delete!('3')
"12451245"
p string
"12451245"

Hash

それではhashクラスはどうなるか?

hash = {a: 1, b: 2, c: 3, d: 4, e: 5}
p hash.delete(:c)
3
p hash
{:a=>1, :b=>2, :d=>4, :e=>5}

という動きをします。

返ってくるのは削除したkeyに対応するvalueです。

また破壊メソッドなので指定した引数が削除されています。

というわけでdeleteメソッドでした。

1
0
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
1
0