[Ruby] 全角文字を2文字として文字数をカウントする

非アスキー文字を2文字とカウントする。

[markdown]
知らなかったメソッドもあって勉強になりました。

> * [Ruby で文字列の表示幅をもとめるおはなし – やまぶろぐ](http://ponde.hatenadiary.com/entry/2014/01/24/013232)

“`ruby
[3] pry(main)> def width
[3] pry(main)* self.length + self.chars.reject(&:ascii_only?).length
[3] pry(main)* end
=> :width
[4] pry(main)> ‘hogeふが’.width
=> 8
“`

## String#chars

> * [instance method String#chars (Ruby 2.4.0)](https://docs.ruby-lang.org/ja/2.4.0/method/String/i/chars.html)
>
> 文字列の各文字を文字列の配列で返します。(self.each_char.to_a と同じです)

“`ruby
[8] pry(main)> ‘hogeふが’.chars
=> [“h”, “o”, “g”, “e”, “ふ”, “が”]
“`

## String#ascii_only?

> * [instance method String#ascii_only? (Ruby 2.4.0)](https://docs.ruby-lang.org/ja/2.4.0/method/String/i/ascii_only=3f.html)
>
> 文字列がASCII文字のみで構成されている場合に true を返します。さもなくば false を返します。

“`ruby
[9] pry(main)> ‘hogeふが’.ascii_only?
=> false
[10] pry(main)> ‘hoge’.ascii_only?
=> true
[11] pry(main)> ‘ふが’.ascii_only?
=> false
“`

## Enumerable#inject

> * [instance method Enumerable#inject (Ruby 2.4.0)](https://docs.ruby-lang.org/ja/2.4.0/method/Enumerable/i/inject.html)
>
> リストのたたみこみ演算を行います。

“`ruby
[5] pry(main)> [1, 2, 3, 4, 5].inject(:+)
=> 15
[21] pry(main)> [“h”, “o”, “g”, “e”, “ふ”, “が”].reject {|item| item.ascii_only? }
=> [“ふ”, “が”]
“`
[/markdown]