J'ai actuellement cette méthode dans mon travail pour une tâche Ruby où j'ai besoin de changer les voyelles et les consonnes dans un nom mis par un utilisateur, à la voyelle/consonne successive suivante, donc (a = e, e = i, etc.) et le même processus pour les consonnes (b = c, d = f, etc.). Je l'ai fait de manière 'facile', mais maintenant j'ai besoin de le changer pour qu'au lieu de cela, j'écrète à travers un tableau et change les voyelles/consonnes de cette façon. Je suis nouveau à l'itération donc j'ai des problèmes avec cela.Comment puis-je itérer dans un tableau et modifier les caractères efficacement?
Voici ma méthode originale:
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
Voici ce que j'ai commencé à travailler avec le changer ci-dessous à l'aide d'un tableau et la méthode bloc. Y a-t-il une façon moins longue et plus facile de faire cela? Existe-t-il une nouvelle façon de le faire, ou en général, un moyen plus efficace?
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("")
Puisqu'il s'agit d'une mission, je suis hésitant à donner une solution complète. D'abord, vous pouvez facilement utiliser la méthode 'tr' comme vous l'avez fait à l'origine, mais faites-le pour chaque caractère de votre bloc' map' (itérateur). Une autre possibilité consiste à créer un mappage entre les caractères d'origine et ce à quoi ils doivent être transformés. "a" => "e", "b" => "c", etc. C'est juste la notation Hash! Vous pourriez chaque caractère pour rechercher facilement la prochaine valeur. –