Удалите ключи с пустыми массивами

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

  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",
      ]
    }
  }

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

Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
0
53
2

Ответы 2

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

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"]
#     }
# }
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"]}}

См. Хэш # transform_values и Хеш # отклонить. Первый дебютировал в MRI v2.4.

Другие вопросы по теме