如何在 Ruby 中同时翻译多个单词?
How to translate multiple words simultaneously in Ruby?
我正在尝试为我和我的朋友创建的语言创建一个替代翻译器。在这种语言中,某些事情必须同时发生,我不知道如何在 Ruby.
中做到这一点
通过交换元音等简单操作,即
a --> u
i --> o
o --> i
u --> a
我刚刚完成了这个:
input.tr("aiou", "uoia")
但我想不出一种方法来同时进行以下翻译:
no --> e
e --> y
y --> el
这样短语 "yellow rhino" 就会变成 "elyllow rhie"。
关于我可以做什么的任何建议或示例? gsub
? tr
?完全是另一种方法?
首先定义一个替换映射:
MAP = {
'a' => 'u',
'i' => 'o',
'o' => 'i',
'u' => 'a',
'y' => 'el',
'no' => 'e',
'e' => 'y'
}
然后你可以把它变成一个正则表达式来一次匹配所有的"keys":
SUBST = Regexp.union(MAP.keys)
这很方便,因为 gsub
可以使用这些映射表进行替换:
def translate(words)
words.gsub(SUBST, MAP)
end
这意味着你可以这样做:
puts translate("translate multiple words simultaneously")
# => trunsluty maltoply wirds somaltunyiaslel
tr
是一个很棒的工具,但它仅限于单个字符替换。 gsub
无所不能 tr
甚至更多。
我正在尝试为我和我的朋友创建的语言创建一个替代翻译器。在这种语言中,某些事情必须同时发生,我不知道如何在 Ruby.
中做到这一点通过交换元音等简单操作,即
a --> u
i --> o
o --> i
u --> a
我刚刚完成了这个:
input.tr("aiou", "uoia")
但我想不出一种方法来同时进行以下翻译:
no --> e
e --> y
y --> el
这样短语 "yellow rhino" 就会变成 "elyllow rhie"。
关于我可以做什么的任何建议或示例? gsub
? tr
?完全是另一种方法?
首先定义一个替换映射:
MAP = {
'a' => 'u',
'i' => 'o',
'o' => 'i',
'u' => 'a',
'y' => 'el',
'no' => 'e',
'e' => 'y'
}
然后你可以把它变成一个正则表达式来一次匹配所有的"keys":
SUBST = Regexp.union(MAP.keys)
这很方便,因为 gsub
可以使用这些映射表进行替换:
def translate(words)
words.gsub(SUBST, MAP)
end
这意味着你可以这样做:
puts translate("translate multiple words simultaneously")
# => trunsluty maltoply wirds somaltunyiaslel
tr
是一个很棒的工具,但它仅限于单个字符替换。 gsub
无所不能 tr
甚至更多。