我正在尝试创建一个将字符串句子作为参数的方法,并将该句子翻译成pig Latin。我目前正试图在一种方法中完成所有这些。
我可以轻松地用一个词来表达:
def pig_latin_word(word)
vowels = %w(a e i o u)
word_array = word.split('')
if vowels.include?(word_array[0])
word_array.join('')
else
until vowels.include?(word_array[0])
word_array += word_array.shift(1)
end
word = word_array.join('')
"#{word}ay"
end
end
我现在想做同样的事情,但让方法采取一个句子。这就是我到目前为止所做的:
def pig_latin_sentence(sentence)
vowels = %w(a e i o u)
sentence_array = sentence.split.each_slice(1).map{|a| a.join('')}
sentence_array.each do |word|
if vowels.include?(word[0])
sentence_array.join(' ')
else
until vowels.include?(word[0])
word_array = word.split('')
word_array += word_array.shift(1)
end
p sentence_array.join('ay ')
end
end
end
我最初试图将句子切成薄片,以便将每个单词分开。然后我可以迭代一个数组,每个单词都是一个元素。但是,为了让我执行.shift
方法,我将不得不再次拆分每个字符串元素。我怎样才能做到这一点?
另外,有没有人有更简洁的方法来编写单字方法?
答案 0 :(得分:2)
正如Dave Newton所说,让你的pig_latin_word处理这些话。如果这些话出了问题,你就会知道在哪里看;同样用句子。
sentence.split.each_slice(1).map{|a| a.join('')}
是来自努力工作的人的代码。
def pig_latin_sentence(sentence)
pig_words = sentence.split.map do |word|
pig_latin_word(word)
end
pig_words.join(" ")
end
答案 1 :(得分:0)
这是我为猪拉丁做的一个解决方案,它有点短了!
def pig_latin_ified(word)
index = /[aeiou]/ =~ word
return word if index == 0
word_array = word.chars
final_solution = (word_array + word_array.shift(index) + ["a", "y"]).join("")
end