我有一个哈希和一个数组。我想检查数组元素是否在哈希中作为键,如果不是,则从哈希中删除键。
RegionScoreHash={"A"=>1, "B"=>0, "C"=>0, "D"=>1, "E"=>0, "F"=>0, "G"=>0}
RegionsArray=["B", "C", "D", "E", "F"]
需要结果:数组中存在元素的哈希(A
和G
区域已删除)
ResultHash={"B"=>0, "C"=>0, "D"=>1, "E"=>0, "F"=>0}
答案 0 :(得分:3)
使用Array
' delete_if
方法修改哈希值。
RegionScoreHash.delete_if { |k| !RegionsArray.include?(k) }
如果您想要新结果,请使用select
之类的内容。
result = RegionScoreHash.select { |k| RegionsArray.include?(k) }
答案 1 :(得分:1)
删除效率低下。
ResultHash = RegionsArray.inject({}){|h, k| h[k] = RegionScoreHash[k]; h}
答案 2 :(得分:0)
试试这个
RegionScoreHash={"A"=>1, "B"=>0, "C"=>0, "D"=>1, "E"=>0, "F"=>0, "G"=>0}
RegionsArray=["B", "C", "D", "E", "F"]
RegionScoreHash.delete_if {|a| !RegionsArray.include?(a)}
作为建议,ruby方式应该是region_score_hash而不是RegionScoreHash。
答案 3 :(得分:0)