📝
Ruby 文字列と配列に使える countメソッド
今日は文字列や配列に使えるcountメソッドについてまとめます。
配列のcountメソッド
配列にcountメソッドを使用する場合、引数のあるなしで挙動が変わります。
irb(main):006:0> array = ["a", "b", "c", "d", "e"]
=> ["a", "b", "c", "d", "e"]
# 引数なしの場合は配列の要素数を返します。(lengthメソッドと同じ挙動)
irb(main):007:0> array.count
=> 5
irb(main):008:0> array.length
=> 5
# 引数ありの場合は、引数に一致するものの個数を返します。
irb(main):009:0> array.count("b")
=> 1
irb(main):010:0> array.count("be")
=> 0
# 引数を2個以上指定することはできません。
irb(main):011:0> array.count("b", "e")
ArgumentError (wrong number of arguments (given 2, expected 0..1))
# ブロックを指定することもできます。その場合は真になった要素の個数を返します。
# 例:要素が数値の配列に対して、計算式に一致した要素の個数を返す。
irb(main):012:0> ary = [1, 2, 4, 2.0]
=> [1, 2, 4, 2.0]
irb(main):013:0> ary.count{ |x| x%2 == 0 }
=> 3
文字列のcountメソッド
文字列にcountメソッドを使用する場合は引数が必須になります。
引数に指定した文字が、文字列内にいくつあるのかを返します。
irb(main):001:0> str = "abcdefghijknlm"
=> "abcdefghijknlm"
# 配列みたいに文字数のカウントには使えません。(文字数カウントはlengthで。)
irb(main):002:0> str.count
ArgumentError (wrong number of arguments (given 0, expected 1+))
irb(main):003:0> str.length
=> 14
# 引数に指定した文字はひとつひとつが判定の対象になります。
irb(main):004:0> str.count("b")
=> 1
irb(main):005:0> str.count("be")
=> 2
# 文字列に対して、ある文字列がいくつ含まれているかを数えたい時は工夫が必要です。
irb(main):018:0> str = "abcdabcdabcd"
=> "abcdabcdabcd"
irb(main):019:0> str.count("abc")
=> 9
# scanメソッドを使用し指定した文字列を配列で返したうえで、lengthメソッドを使用すれば文字列が含まれている回数を数えられます。
irb(main):020:0> str.scan("abc")
=> ["abc", "abc", "abc"]
irb(main):021:0> str.scan("abc").length
=> 3
参考
Discussion