首页 > 解决方案 > 有人可以帮我理解这个 Pig Latin 迭代在 Ruby 中是如何工作的吗?

问题描述

def pig_latin_word(word)
  vowels = "aeiou"

  if vowels.include?(word[0])
     return word + "yay"
  end

  word.each_char.with_index do |char, i|
    if vowels.include?(char)
      return word[i..-1] + word[0...i] + "ay"
    end
  end
end

关于方法,假设代码接受输入“banana”,它返回“ananabay”。但是如果我遍历字符串中的每个字符,最后一个迭代的元音会不会是新的 Pig Latin 单词的创建源?

换句话说,“banana”返回“ananabay”而不是返回“abananay”的原因是什么?

标签: rubyiteration

解决方案


换句话说,“banana”返回“ananabay”而不是返回“abananay”的原因是什么?

让我们逐行浏览代码:

if vowels.include?(word[0])

第一个字母"banana"是元音吗 不,所以第一个块不评估。

word.each_char.with_index do |char, i|

这是遍历单词的每个字母

在第一次迭代和。char = "b"i = 0

if vowels.include?(char)

"b"元音吗?不,因此该块不评估。

下一次迭代......现在,char = "a"i = 1

"a"元音吗?的,因此该块进行评估。让我们看看它是怎么说的:

return word[i..-1] + word[0...i] + "ay"
  • word[1..-1]意思是“从 的第二个字母最后一个字母的所有内容word,即."anana"
  • word[0...1]意思是“从 的第一个字母但不包括第二个字母的所有内容。换句话说,只有第一个字母:。word"b"
  • 将它们连接在一起,你会得到:"anana" + "b" + "ay",即"ananabay"

推荐阅读