【发布时间】:2026-02-17 01:55:02
【问题描述】:
我目前在我的 Ruby 作业中使用这种方法,我需要将用户输入的名称中的元音和辅音更改为下一个连续的元音/辅音,所以 ( a = e, e = i等)和辅音的相同过程(b = c,d = f 等)。我以“简单”的方式完成了它,但现在我需要更改它,以便我遍历数组并以这种方式更改元音/辅音。
我是迭代新手,所以我遇到了麻烦。
这是我原来的方法:
puts "What is your full name?"
full_name = gets.chomp
def vowelreplace(full_name)
vowels = 'aeiou'
replacements = 'eioua'
full_name.tr(vowels, replacements)
end
name_next_vowel = vowelreplace(full_name)
p name_next_vowel
def consonantreplace(name_next_vowel)
consonants = 'bcdfghjklmnpqrstvwxyz'
replacements = 'cdfghjklmnpqrstvwxyzb'
name_next_vowel.tr(consonants, replacements)
end
new_spyname = consonantreplace(name_next_vowel)
p new_spyname
下面是我开始使用数组和块方法更改它的方法。有没有更简单、更省时的方法来做到这一点?有没有一种 .next 方法可以做到这一点,或者一般来说,一种更有效的方法?
puts "What is your first name?"
first_name = gets.chomp
arr = first_name.split("")
p arr
arr.map! { |element|
if(element == "a")
"e"
elsif(element == "e")
"i"
elsif(element == "i")
"o"
elsif(element == "o")
"u"
elsif(element == "u")
"a"
else
element
end
}
p arr
new_arr = arr
new_arr.map! { |element|
if(element == "b")
"c"
elsif(element == "c")
"d"
elsif(element == "d")
"f"
elsif(element == "f")
"g"
elsif(element == "g")
"h"
elsif(element == "h")
"j"
elsif(element == "j")
"k"
elsif(element == "k")
"l"
elsif(element == "l")
"m"
elsif(element == "m")
"n"
elsif(element == "n")
"p"
elsif(element == "p")
"q"
elsif(element == "q")
"r"
elsif(element == "r")
"s"
elsif(element == "s")
"t"
elsif(element == "t")
"v"
elsif(element == "v")
"w"
elsif(element == "w")
"x"
elsif(element == "x")
"y"
elsif(element == "y")
"z"
elsif(element == "z")
"b"
else
element
end
}
p new_arr
arr.join("")
【问题讨论】:
-
由于这是一项任务,我不愿给出完整的解决方案。首先,您可以像最初那样轻松地使用
tr方法,但是对map(迭代器)块中的每个字符都这样做。另一种可能性是在原始字符和它们应该转换成的字符之间创建一个映射。 "a" => "e", "b" => "c" 等等。这只是哈希表示法!您可以轻松地查找每个字符的下一个值。
标签: arrays ruby loops iteration