我有以下哈希:
myhash = {
"csv-collector" => {
"destination-queues" => ["csv-parser-queue"]
},
"csv-parser" => {
"source-queue" => "csv-parser-queue",
"destination-queues" => ["mtf-asn-lookup-expert-queue"]
}
}
我想删除保留哈希值mtf-asn-lookup-expert-queue
,如下所示:
myhash = {
"csv-collector" => {
"destination-queues" => ["csv-parser-queue"]
},
"csv-parser" => {
"source-queue" => "csv-parser-queue",
"destination-queues"=>[]
}
}
我有以下代码:
tag = "mtf"
myhash.each_pair do |key, value|
value.delete_if { |inner_key, inner_value| inner_value[0].match(tag) }
end
这给了我这个输出:
{
"csv-collector" => {
"destination-queues" => ["csv-parser-queue"]
},
"csv-parser" => {
"source-queue" => "csv-parser-queue"
}
}
删除键和值,我只想删除该值。你能帮助我吗? :)
谢谢!! :d
答案 0 :(得分:1)
在您的代码中,value
引用内部哈希,因此value.delete_if
会尝试从中删除键值对。
要从所有"mtf"
数组中删除包含destination-queues
的任何值,您可以使用:
tag = 'mtf'
myhash.each_value do |inner_hash|
inner_hash['destination-queues'].delete_if { |element| element.include? tag }
end
代码假定每个内部哈希包含一个destination-queues
数组。
答案 1 :(得分:0)
myhash.each {|_,g| g.each {|_,v| v.replace([]) if Array===v && v.first.match('mtf')}}
#=> {"csv-collector"=>{"destination-queues"=>["csv-parser-queue"]},
# "csv-parser"=>{"source-queue"=>"csv-parser-queue", "destination-queues"=>[]}}