我不是程序员,但发现自己写了一些简单的Ruby.我需要用一个IP地址列表填充一个数组,10.13.203.3,10.13.204.3等.
我知道我可以将范围扩展为这样的数组,但是如何将其转换为我的IP地址模式?
a =* (3..10)
#=> [3, 4, 5, 6, 7, 8, 9, 10]
Run Code Online (Sandbox Code Playgroud)
我以为我需要进行字符串插值,并以某种方式将其反馈到不同的数组中.但我真的不确定,也绝不能正确使用谷歌搜索,因为这感觉像是一件普通的事情.
您可以使用IPAddr该类,特别是IPAddr :: new方法.
我已经编写了方法来获取三个参数,第一个IP,下一个IP和要生成的IP总数,同时保持第一个和第二个IP之间的差异.
require 'ipaddr'
def gen_ips(ip_start, ip_next, number)
ips, ipn = [ip_start, ip_next].map { |ip| IPAddr.new(ip) }
(ips..IPAddr.new("255.255.255.255")).
step(ipn.to_i-ips.to_i).
lazy.
map { |ip| ip.to_s }.first(number)
end
gen_ips("10.13.203.3", "10.13.204.3", 6)
# => ["10.13.203.3", "10.13.204.3", "10.13.205.3", "10.13.206.3",
# "10.13.207.3", "10.13.208.3"]
gen_ips("10.13.254.250", "10.13.254.252", 6)
#=> ["10.13.254.250", "10.13.254.252", "10.13.254.254", "10.13.255.0",
# "10.13.255.2", "10.13.255.4"]
Run Code Online (Sandbox Code Playgroud)
第二个示例显示了当下一个IP在前一个组中滚动一个数字时会发生什么.
我使用Enumerable #lazy将枚举器转换为惰性,因此first(number)一旦number计算了映射的元素就会调用(而不是等到枚举器生成范围中的最后一个IPAddr('255.255.255.255')).
| 归档时间: |
|
| 查看次数: |
283 次 |
| 最近记录: |