将元音推进Ruby中的下一个元音

Ori*_*rie 2 ruby string

我正在研究初学Ruby教程.我正在尝试编写一种方法,将元音推进到下一个元音.'a'将成为'e','e'将成为'i','u'将成为'a'等等.我已经尝试了很长一段时间的各种想法,但无济于事.

我想我正处于正确的轨道上,因为我需要创建一个元音数组,然后使用索引将它们推进到元音中的下一个数组.我似乎无法创建正确的方法来这样做.

我知道这不是可行的代码,但我的大纲是这些.遇到问题的地方是让我的代码识别每个元音,并将其推进到下一个元音:

def vowel_adv(str)
    vowels = ["a", "e", "i", "o", "u"]

    str = str.split('')
    **str_new = str.map do |letter| 
    if str_new.include?(letter)
        str_new = str_new[+1]
    end**
    # The ** section is what I know I need to find working code with, but keep hitting a wall.
    str_new.join
end
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

SHS*_*SHS 5

因为我们只有几个元音,所以我首先要定义一个包含元音键和元音值的哈希:

vowels_hash = {
  'a' => 'e',
  'A' => 'E',
  'e' => 'i',
  'E' => 'I',
  'i' => 'o',
  'I' => 'O',
  'o' => 'u',
  'O' => 'U',
  'u' => 'a',
  'U' => 'A'
}
Run Code Online (Sandbox Code Playgroud)

然后我会迭代每个单词/句子中出现的字母,如下所示:

word.split(//).map do |character|
  vowels_hash[character] || character
end.join
Run Code Online (Sandbox Code Playgroud)

更新:

BTW而不是拆分这个词,你也可以使用gsub正则表达式+哈希参数,如下所示:

word.gsub(/[aeiouAEIOU]/, vowels_hash)
Run Code Online (Sandbox Code Playgroud)

或者如果你想成为先生/女士花式裤子:

regex = /[#{vowels_hash.keys.join}]/
word.gsub(regex, vowels_hash)
Run Code Online (Sandbox Code Playgroud)

  • 谢谢@DaveSchweisguth.我想我们可以使用与`zip`一起共享的`rotate`方法来生成`vowels_hash`,但在这种情况下输入它会更清楚. (2认同)