我有一系列像这样的哈希:
array = [{
"id"=>"ABC",
"account"=>"XYZ",
"date"=>"2014-07-21",
"amount"=>200,
"score"=>{"location"=>{"city"=>1, "state"=>1}, "name"=>1},
"cat"=>#<Tipper::Category:0xb666fb0
@type={"primary"=>"special"},
@hierarchy=["Transfer","Withdrawal", "ATM"],
@id="21012002"
>,
"state"=>"CA"
},
{"id=>"XYZ","account"=>"987"}]
我想迭代数组中的每个哈希并删除&#34;类别&#34;从每个散列中分段并生成一个没有&#34;类别的散列数组&#34;任何哈希中的项目。我试过这个:
filtered_array = array.reject { |t| array.include? t['cat'] }
这不是这样做的。
答案 0 :(得分:1)
您可以使用地图和删除
这将对散列的实际实例起作用,因此数组将被修改。
array.each{ |hash| hash.delete('cat') }
你可以这样做以获得一个新阵列,并保持第一个不被触及。
new_array = array.map do |hash|
new_hash = hash.dup
new_hash.delete('cat')
new_hash
}
答案 1 :(得分:1)
假设你有一个哈希数组:
array = [ {"id" => 1, "name" => "bob", "cat" => "dog"},
{"id" => 2, "name" => "jim", "cat" => "mouse"},
{"id" => 1, "name" => "nick", "cat" => "fish"} ]
您可以执行以下操作:
array.map { |hash| hash.reject {|k, v| k == "cat" } }
这会返回一个新的哈希数组,删除cat
对,同时仍然保留原始数组:
=> [{:id=>1, :name=>"bob"}, {:id=>2, :name=>"jim"}, {:id=>1, :name=>"nick"}]
希望它有所帮助!