Rubyであかさたなでgroup_by


ひらがなの文字列の入った配列を、1文字目がどの行（あかさたなはまやらわ）かでグループ分けしたい時、  
どんな実装が考えられますでしょうか？

[code]

    a = %w[あかがい うなぎ ほたて]
    puts group_by_kana_row(a)
    
    # { 'あ'=> ['あかがい', 'うなぎ'], 'は'=> ['ほたて'] }
    
[/code]




以下はどうでしょうか?

[code]

    a = %w[あかがい うなぎ ほたて]
    
    group = a.group_by do |item|
      case item[0]
      when /[ぁ-お]/  # ぁ, あ, ぃ, い, ぅ, う, ぇ, え, ぉ, お
        'あ'
      when /[か-ご]/  # か, が, き, ぎ, く, ぐ, け, げ, こ, ご
        'か'
      when /[さ-ぞ]/  # さ, ざ, し, じ, す, ず, せ, ぜ, そ, ぞ
        'さ'
      when /[た-ど]/  # た, だ, ち, ぢ, っ, つ, づ, て, で, と, ど
        'た'
      when /[な-の]/  # な, に, ぬ, ね, の
        'な'
      when /[は-ぽ]/  # は, ば, ぱ, ひ, び, ぴ, ふ, ぶ, ぷ, へ, べ, ぺ, ほ, ぼ, ぽ
        'は'
      when /[ま-も]/  # ま, み, む, め, も
        'ま'
      when /[ゃ-よ]/  # ゃ, や, ゅ, ゆ, ょ, よ
        'や'
      when /[ら-ろ]/  # ら, り, る, れ, ろ
        'ら'
      when /[ゎ-を]/  # ゎ, わ, ゐ, ゑ, を
        'わ'
      else
        item[0] # ん, その他
      end
    end
    
    group                           #=> {"あ"=>["あかがい", "うなぎ"], "は"=>["ほたて"]}
    
[/code]

### 参考

[正規表現を使うときに注意すべきこと#ひらがなの文字コード](https://qiita.com/kokorinosoba/items/78811d7e2b6bc424b1b1#%E3%81%B2%E3%82%89%E3%81%8C%E3%81%AA%E3%81%AE%E6%96%87%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89)




同じく、`group_by` を使ってみました。

[code]

    def group_by_kana_row(a)
      keys = 'あかさたなはまやらわん'.chars
      keys_ord = 'ぁかさたなはまゃらゎん'.chars.map{|c| c.ord}
      a.group_by do |item|
        first = item[0].ord; r = 'no_match'
        keys_ord.each_with_index do |k, i|
          next if first > k
          r = keys[(first == k ? i : i-1)]
          break
        end
        r
      end
    end
    
    a = %w[あかがい うなぎ ほたて]
    group_by_kana_row(a)
    {"あ"=>["あかがい", "うなぎ"], "は"=>["ほたて"]}
    
[/code]

