如何在Ruby中同时翻译多个单词?

时间:2019-04-16 17:30:56

标签: ruby substitution

我正在尝试为我的朋友和我创建的语言创建替代翻译器。用这种语言,某些事情必须同时发生,而我不知道如何在Ruby中做到这一点。

通过简单的事情,例如在周围交换元音

a --> u
i --> o
o --> i
u --> a

我刚刚这样做:

input.tr("aiou", "uoia")

但是我想不出一种方法来同时进行以下翻译:

no --> e
e --> y
y --> el

以便短语“ yellow rhino”将变为“ elyllow rhie”。

关于我可以做什么的任何建议或示例? gsubtr?完全是另一种方法吗?

1 个答案:

答案 0 :(得分:6)

首先定义一个替换图:

MAP = {
  'a' => 'u',
  'i' => 'o',
  'o' => 'i',
  'u' => 'a',
  'y' => 'el',
  'no' => 'e',
  'e' => 'y'
}

然后,您可以将其变成一个正则表达式以一次匹配所有“键”:

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可以做的所有事情。