Arrays 计数ruby正则表达式匹配
我正在查找数组的计数/长度。 匹配aip然后计数=4匹配bip计数=5 这些计数每次都可能不同,主机的这些值可能是3到一些n。所以我试着打长途电话Arrays 计数ruby正则表达式匹配,arrays,ruby,count,Arrays,Ruby,Count,我正在查找数组的计数/长度。 匹配aip然后计数=4匹配bip计数=5 这些计数每次都可能不同,主机的这些值可能是3到一些n。所以我试着打长途电话 hosts = ["aip1,aip2,aip3,aip4","bip1,bip2,bip3,bip4,bip5"] if ! hosts.nil? hosts.each do|d| if d.match(/^aip/) name = "a" else name = "b" end 我这样试过,但不
hosts = ["aip1,aip2,aip3,aip4","bip1,bip2,bip3,bip4,bip5"]
if ! hosts.nil?
hosts.each do|d|
if d.match(/^aip/)
name = "a"
else
name = "b"
end
我这样试过,但不适合我,有没有更好的方法可以尝试。数一数
i was using counts = Hash.new(0)
hosts.each { |count| counts[count] += 1 }
我试图得到确切的是,如果匹配regexp aip,那么count=4,或者count必须得到5(我有5个bip)
这些计数每次都会改变。
使用ruby 2.0.0p648(2015-12-16)[x86_64-linux]版本的ruby不清楚您想做什么,而且您似乎在问一个问题 我建议使用类似这样的方法来分解字符串数组:
hosts = ["aip1,aip2,aip3,aip4","bip1,bip2,bip3,bip4,bip5,....."]
hash = hosts.map { |s| [ s[0], s.split(',') ] }.to_h
# => {"a"=>["aip1", "aip2", "aip3", "aip4"],
# "b"=>["bip1", "bip2", "bip3", "bip4", "bip5", "....."]}
此时,hash
可以轻松找到问题:
hash.keys # => ["a", "b"]
hash['a'] # => ["aip1", "aip2", "aip3", "aip4"]
hash['a'].size # => 4
甚至确定计数
:
count = hash.values.map(&:size).reduce(&:+) # => 10
分为:
count = hash.values # => [["aip1", "aip2", "aip3", "aip4"], ["bip1", "bip2", "bip3", "bip4", "bip5", "....."]]
.map(&:size) # => [4, 6]
.reduce(&:+) # => 10
如果您使用的是Ruby 2.4+,您可以使用:
count = hash.values.sum { |i| i.size } # => 10
您是在生成字符串数组,还是这样产生的?读者不必通过研究代码来推断您的问题。请编辑,在开头用文字解释你想做什么。此外,无论何时给出示例(
hosts
此处),请显示所需的结果。