如果值与文本文件中的行匹配,则从哈希数组中删除元素

时间:2016-05-23 12:59:46

标签: ruby

我有一个带有哈希的JSON文件,看起来像这样

{
  "1": {
    "organisation": "Example1",
    "name": "Name1",
    "items": [
      {
        "name": "Name1",
        "html_url": "URL1",
        "results": [
          "items go here"
        ]
      },
      {
        "name": "Name2",
        "html_url": "URL2",
        "results": [
          "Items go here"
        ]
      },

我想删除html_url与存储在文本文件中的列表匹配的元素,我一直在玩弄删除 - 如果是这样的话。

@org.each do |key,value|
    File.open('views/investigated.txt').each do |line|
        value['items'].delete_if { |h| h['html_url'] == line }                
    end
end

但它似乎没有改变阵列,我完全迷失了,任何帮助都会非常感激

2 个答案:

答案 0 :(得分:1)

@Stefan是对的,最好用你想从数组中删除的行创建一个单独的数组:

urls_to_delete = []
File.open('views/investigated.txt').each do |line|
    urls_to_delete.push(line)
end

然后使用该数组从哈希中删除行:

@org.each do |key,value|
    value['items'].delete_if { |h| urls_to_delete.include?(h['html_url']) }
end

使用您的示例对其进行测试,并完全按照您要实现的目标进行测试。

答案 1 :(得分:0)

也许你可以在˙@org˙上使用each_key删除一次迭代中的记录,而你不需要新的数组。 像这样:

@org.each_key do |key|
  File.open('views/investigated.txt').each do |line|
    line.chomp!
    @org[key]['items'].delete_if { |h| h['html_url'] == line }
  end
end