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

问题描述 投票:3回答:1

我正在尝试为我和朋友创建的语言创建替换翻译器。在这种语言中,某些事情必须同时发生,我无法弄清楚如何在Ruby中做到这一点。

简单的事情就像交换元音一样,即

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

我刚刚这样做了:

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

但我无法找到一种方法使以下翻译同时发生:

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

所以短语“黄犀牛”将成为“elyllow rhie”。

我能做什么的任何建议或例子? gsubtr?另一种方法呢?

ruby substitution
1个回答
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可以和更多。

© www.soinside.com 2019 - 2024. All rights reserved.