Удалить ключи, которые имеют пустые массивы - PullRequest
0 голосов
/ 03 октября 2018

Мне нужно удалить вложенные ключи с пустыми массивами:

  networks = {
    "CL1": {
      "192.168.200.0/24": [

      ],
      "192.168.56.0/24": [
        "192.168.56.57",
        "192.168.56.84",
      ]
    },
    "CL2": {
      "192.168.222.0/24": [
        "192.168.222.224",
      ]
    }
  }

до

  networks = {
    "CL1": {
      "192.168.56.0/24": [
        "192.168.56.57",
        "192.168.56.84",
      ]
    },
    "CL2": {
      "192.168.222.0/24": [
        "192.168.222.224",
      ]
    }
  }

Можно ли удалить ключевые элементы с пустым массивом?

Ответы [ 2 ]

0 голосов
/ 03 октября 2018
networks.transform_values { |v| v.reject { |_,a| a.empty? } }
  #=> {:CL1=>{:"192.168.56.0/24"=>["192.168.56.57", "192.168.56.84"]},
  #    :CL2=>{:"192.168.222.0/24"=>["192.168.222.224"]}}

См. Hash # transform_values ​​ и Hash # reject .Первый дебютировал в MRI v2.4.

0 голосов
/ 03 октября 2018

Вы можете создать новый, отфильтровав пустые ключи во внутреннем хеше.

networks = networks.map {|key, inner_hash|  [key, inner_hash.select{|k, v| v.any?}.to_h]}
                   .to_h
puts networks
# {
#     :CL1 => {
#         :"192.168.56.0/24" => ["192.168.56.57", "192.168.56.84"]
#     }, 
#     :CL2 => {
#         :"192.168.222.0/24" => ["192.168.222.224"]
#     }
# }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...