代码之家  ›  专栏  ›  技术社区  ›  akshay1188

从Rails中的散列中删除多个键和值对

  •  16
  • akshay1188  · 技术社区  · 14 年前
    number = {:a => 1, :b => 2, :c => 3, :d => 4}
    

    在对某些条件求值之后,我想删除a,b,c的键值对

    3 回复  |  直到 9 年前
        1
  •  17
  •   Chris Heald    14 年前
    number.delete "A"
    number.delete "B"
    number.delete "C"
    

    或者,表现不那么突出,但更简洁:

    number.reject! {|k, v| %w"A B C".include? k }
    
        2
  •  13
  •   Pavel K.    12 年前

    或者,比第二个解决方案更有效,但比第一个解决方案更短:

    %w"A B C".each{|v| number.delete(v)}
    
        3
  •  11
  •   Viktor    7 年前

    ActiveSupport是Rails的一部分,它有几个内置方法可以帮助您实现目标。

    如果您只想删除一些键值对,可以使用 Hash#except!

    number.except!(:a, :b, :c)
    

    如果要保留原始哈希,请使用 Hash#except

    new_hash = number.except!(:a, :b, :c)
    
    new_hash # => {:d=>4}
    number # => {:a=>1, :b=>2, :c=>3, :d=>4}
    

    new_hash = number.dup.tap do |hash|
      %i[a b c].each {|key| hash.delete(key)}
    end
    
    new_hash # => {:d=>4}
    number # => {:a=>1, :b=>2, :c=>3, :d=>4}