【发布时间】:2017-04-26 17:12:17
【问题描述】:
我有一组包含子网的数组,其中一个子网是错误的(缺少一个八位字节),我想合并它们并忽略错误的。
我有以下代码:
subnets = ["149.62.168.0/24"], ["134.247.2.0/24"], ["159.226.92.0/24","159.8.57/22"]
require 'netaddr'
subnet.each do |net|
begin
merged_subnets = NetAddr.merge(net)
rescue ArgumentError => error
puts error
end
puts merged_subnets
end
这段代码给了我以下输出:
149.62.168.0/24
134.247.2.0/24
One of the provided CIDR addresses raised the following errors: 159.8.57 is invalid (IPv4 requires (4) octets).
然而,我所期待的是:
149.62.168.0/24
134.247.2.0/24
159.226.92.0/24
One of the provided CIDR addresses raised the following errors: 159.8.57 is invalid (IPv4 requires (4) octets).
我不明白为什么子网 159.226.92.0/24 没有出现在输出中。
【问题讨论】:
-
从技术上讲,应该是
subnets = [ ["149..."], [ ... ], ... ],其中有周围的外部方括号。您在那里拥有的东西有效,但它具有误导性。您实际上是在创建一个数组数组。flatten可以帮助遍历所有单个元素。