我正在研究初学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)
任何帮助将不胜感激.
因为我们只有几个元音,所以我首先要定义一个包含元音键和元音值的哈希:
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)