簡體   English   中英

刪除Ruby Hash中的鍵數組

[英]Delete array of keys in Ruby Hash

我將如何刪除散列中的一組鍵? 例如,您可以調用:

hash.delete(some_key)

但我怎么能做到這一點:

hash.delete([key1,key2,key3,...])

無需手動循環。

您可以遍歷一組鍵並刪除所有鍵:

[key1, key2, key3].each { |k| some_hash.delete k }

不記得有什么更好的解決方案了。

這正是您要尋找的……您可以這樣做,而無需不必要地遍歷數組。

keys_to_delete = [key1, key2, key3]
hash_array.except!(*keys_to_delete)

結果存儲在 hash_array 中

您可以嘗試使用Hash#delete_if

delete_if 從 hsh 中刪除塊評估為 true 的每個鍵值對。

array_hash.delete_if { |key, _| [key1, key2, key3].include? key }

更新如果您不想迭代鍵數組,則可以使用Set而不是Array (因為Set使用Hash作為存儲include?是 O(1)):

require 'set'
keys = [key1,key2,key3].to_set
array_hash.delete_if { |key, _| keys.include? key }

也許值得做一個方法

class Hash
  def delete_by_keys *keys
    keys.each{|k| delete(k)}
  end
end

hash_array.delete_by_keys(key1,key2,..)

ActiveSupport(Rails 的一部分)正是實現了這一點,如 Hash#except 和 Hash#except!

def except!(*keys)
    keys.each { |key| delete(key) }
    self
end

http://apidock.com/rails/v4.0.2/Hash/except%21

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM