「Hello world! :-)」のような単純な文字列入力を解析し、単語を分割していくつかの変更を行う配列に変換します。私は動作している次のコードを作成しましたが、Ruby の慣用句ではないようです。どうすれば改善できますか?
$mapping = Hash[
"X" => "CODE_X",
"Y" => "CODE_Y",
"Z" => "CODE_Z",
]
def translate(input)
result = []
tmp = ""
input.each_char do |c|
if $mapping.has_key?(c)
if result != ""
result << "normal " + tmp
tmp = ""
end
result << "special " + $mapping[c]
else
tmp += c
end
end
if tmp != ""
result << "normal " + tmp
end
return result
end
不必要な行が多くて読みにくいようです。それは何をしますか、おそらく例が役立ちます:
translate("HelloXworldYZ") =>
["normal Hello", "special CODE_X", "normal world", "special CODE_Y", "special CODE_Z"]
または英語で:文字列を文字ごとに解析し、文字を再度連結します。(1) 文字がなくなるまで、または (2) 特殊文字 (マッピング) が存在するまで、結果の配列にそれらを「通常の」 + 文字列として追加し、文字列を配列に追加し、特殊文字を「特別な」として追加します。 + マッピングして、文字列の残りの部分を続行します。