問題はこちら。
https://github.com/JunichiIto/name-index
参考サイトはこちら
class NameIndex
NAME_INDEX_HASH = {
'ア' => %w(ア イ ウ エ オ ヴ),
'カ' => %w(カ キ ク ケ コ ガ ギ グ ゲ ゴ),
'サ' => %w(サ シ ス セ ソ ザ ジ ズ ゼ ゾ),
'タ' => %w(タ チ ツ テ ト ダ ヂ ヅ デ ド),
'ナ' => %w(ナ ニ ヌ ネ ノ),
'ハ' => %w(ハ ヒ フ ヘ ホ バ ビ ブ ベ ボ パ ピ プ ペ ポ),
'マ' => %w(マ ミ ム メ モ),
'ヤ' => %w(ヤ ユ ヨ),
'ラ' => %w(ラ リ ル レ ロ),
'ワ' => %w(ワ ヲ ン)
}.freeze
def self.create_index(names)
names.sort.group_by {|name|
NAME_INDEX_HASH.find(['Others']) {|_, value| value.include?(name[0])}.first
}.to_a
end
end
names = ['キシモト', 'イトウ', 'ババ', 'カネダ', 'ワダ', 'ハマダ']
p NameIndex.create_index(names)
目次
今日の積み上げ
sort
配列の内容をソートする。sortはソートされた配列を生成して返す。
sort!
selfを破壊的にソートし、selfを返す。
namesで受け取った値を辞書[katakana]に沿って並べ替えて返す。
freeze
オブジェクトを凍結(内容の変更を禁止)する。
group_by
ブロックを評価した結果をキー、対応する要素の配列を値とするハッシュを返す。
to_a
キーと値からなる 2 要素の配列を並べた配列を生成して返します。
https://docs.ruby-lang.org/ja/latest/method/Hash/i/to_a.html
おすすめテキスト
テストを書かれた伊藤さんのチェリー本で勉強しています。