从哈希数组中删除哈希?

时间:2014-02-04 01:30:02

标签: ruby-on-rails ruby hash

h = {
    :vehicle => [
        [0] {
            :make => "Honda",
            :year => 2010
        },
        [1] {
            :make => "Kia",
            :year => 2014
        },
        [2] {
            :make => "Saturn",
            :year => 2005
        }
    ]
}

我想删除{:make=>"Kia", :year=>2014},以便h为:

h = {
    :vehicle => [
        [0] {
            :make => "Honda",
            :year => 2010
        },
        [1] {
            :make => "Saturn",
            :year => 2005
        }
    ]
}

我试过了:

h[:vehicle].delete_if{ |_,v| v == "Kia" } 
 #=> does nothing

h.delete_if{ |_,v| v == "Kia" } 
 #=> does nothing

h[:vehicle].tap { |_,v| v.delete("Kia") } 
 #=> does nothing

h.delete("Kia") 
 #=> nil

h[:vehicle].delete("Kia") 
 #=> nil

这是我头痛的地方:

h[:vehicle].include?("Kia") 
 #=> false 

h[:vehicle][1] 
 #=> {:make=>"Kia", :year=>2014} 

h[:vehicle][1].include?("Kia") 
 #=> false

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

h[:vehicle].delete_if { |h| h[:make] == 'Kia' }

将删除带有Kia的h副本。请注意,虽然这是一种有点奇怪的方法,但您的第一个示例对我有用。请记住,您必须查看返回的值才能看到结果 - delete_if不会修改原始哈希。