Как удалить ключ из Hash и получить оставшийся хэш в Ruby / Rails? - PullRequest
511 голосов
/ 03 июня 2011

Чтобы добавить новую пару в Hash, я делаю:

{:a => 1, :b => 2}.merge!({:c => 3})   #=> {:a => 1, :b => 2, :c => 3}

Есть ли аналогичный способ удаления ключа из Hash?

Это работает:

{:a => 1, :b => 2}.reject! { |k| k == :a }   #=> {:b => 2}

но я бы ожидал что-то вроде:

{:a => 1, :b => 2}.delete!(:a)   #=> {:b => 2}

Важно, чтобы возвращаемое значение было оставшимся хешем, поэтому я мог бы сделать что-то вроде:

foo(my_hash.reject! { |k| k == my_key })

в одну строку.

Ответы [ 14 ]

3 голосов
/ 02 сентября 2018

Было бы здорово, если delete вернул пару удаления хэша.Я делаю это:

hash = {a: 1, b: 2, c: 3}
{b: hash.delete(:b)} # => {:b=>2}
hash  # => {:a=>1, :c=>3} 
1 голос
/ 12 января 2014

Это однострочный способ сделать это, но он не очень читабелен. Рекомендуется использовать две строки.

use_remaining_hash_for_something(Proc.new { hash.delete(:key); hash }.call)
0 голосов
/ 14 мая 2019

Несколько способов удалить Key in Hash.Вы можете использовать любой метод снизу

hash = {a: 1, b: 2, c: 3}
hash.except!(:a) # Will remove *a* and return HASH
hash # Output :- {b: 2, c: 3}

hash = {a: 1, b: 2, c: 3}
hash.delete(:a) # will remove *a* and return 1 if *a* not present than return nil

Так много способов, вы можете посмотреть на Ruby doc of Hash здесь .

Спасибо

0 голосов
/ 02 февраля 2014

Это также будет работать: hash[hey] = nil

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...