Мне нужно удалить подключи, у которых есть пустые массивы:
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",
]
}
}
Можно ли удалить ключевые элементы с пустым массивом?



Вы можете создать новый, отфильтровав пустые ключи во внутреннем хэше.
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.