2017-01-28 11 views
0

私の配列の数/長さを探していた。 がaipと一致した後にcount = 4が一致するbip count = 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 } 

私はマッチ正規表現AIP場合、正確だっ取得しようとしていた、その後 これらのカウント数は毎回変更されます(私は5つのBIPのを持っている)4 =カウントまたは他の5を取得する必要がカウントされます。 ruby​​を使って2.0.0p648(2015-12-16)[x86_64-linux]バージョンruby

+0

あなたは文字列の配列を生成している、またはそれはあなたにそのように来るのか? –

+1

読者はあなたのコードを勉強して質問を推論する必要はありません。言い換えれば、始めに何をしようとしているのかを説明するように編集してください。また、例を挙げると(ここでは 'hosts')、望む結果を表示してください。 –

答えて

1

あなたがしようとしていることは明確ではなく、ほぼXY Problemについて尋ねているようです。

私は、文字列の配列を打破するために、このようなものを使用してお勧めします。この時点hash

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.keys # => ["a", "b"] 

hash['a'] # => ["aip1", "aip2", "aip3", "aip4"] 
hash['a'].size # => 4 

とにも決定count

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 

あなたが使用することができ2.4+ルビーを使用している場合:

count = hash.values.sum { |i| i.size } # => 10