仅从Ruby Hash中删除值

时间:2017-02-21 10:41:38

标签: arrays ruby hash

我有以下哈希:

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

2 个答案:

答案 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"=>[]}}