我正在解析简单的字符串输入,例如:“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)有特殊字符(映射),他们将字符串添加到数组中并将特殊字符添加为“特殊” + 映射并继续字符串的其余部分。