Arrays 计数ruby正则表达式匹配

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 我这样试过,但不

我正在查找数组的计数/长度。 匹配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
我这样试过,但不适合我,有没有更好的方法可以尝试。数一数

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
此处),请显示所需的结果。