数组枚举无法正常工作?
我创建了一个方法(猪拉丁),并且遇到了这个示例测试用例的问题: translate(“吃馅饼”)应该返回“eatay iepay”,但我的代码似乎没有做出适当的更改。数组枚举无法正常工作?
def translate(phrase)     phrase = phrase.split.each do |word| 
    if ['a', 'e', 'i', 'o', 'u'].include?(word[0]) 
     word = word + 'ay' 
    else 
     ['a', 'e', 'i', 'o', 'u'].include?(word[1])? 
     word = word[1..-1] + word[0] + 'ay' : word = word[2..-1] + word[0..1] + 'ay' 
    end 
    end 
    phrase.join(' ') 
end 
我遇到的问题是数组枚举不能操纵每个单词。我对此感到茫然。提前致谢。
回答:
的each方法简单地为列表中的每个元素执行块。修改控制变量word不会影响列表的原始元素。
我建议你使用map方法,它将一个列表转换为另一个列表。它将原始列表的每个元素传递给块,并用该块返回的值替换它。
此外,你应该只有使用条件运算符a ? b : d返回一个值 - 你不应该修改任何变量。所以你可以写
word = ['a', 'e', 'i', 'o', 'u'].include?(word[1]) ?     word[1..-1] + word[0] + 'ay' : 
    word[2..-1] + word[0..1] + 'ay' 
但是这里最好只使用一个额外的elsif子句。
此代码做你想要的。
def translate(phrase)     phrase = phrase.split.map do |word| 
    if ['a', 'e', 'i', 'o', 'u'].include?(word[0]) 
     word + 'ay' 
    elsif ['a', 'e', 'i', 'o', 'u'].include?(word[1]) 
     word[1..-1] + word[0] + 'ay' 
    else 
     word[2..-1] + word[0..1] + 'ay' 
    end 
    end 
    phrase.join(' ') 
end 
p translate "eat pie" 
输出
"eatay iepay" 更新
这是使用正则表达式更好写。你可能有兴趣在这个变
def translate(phrase)     phrase.split.map { |word| word.sub /^([^aeiou]*)(.+)/, '\2\1ay' }.join ' ' 
end 
p translate 'pig latin' 
输出
"igpay atinlay" 回答:
我认为您正在寻找collect(或map)而不是each以上。所以,你的代码将是:
def translate(phrase)     phrase = phrase.split.collect do |word| 
    if ['a', 'e', 'i', 'o', 'u'].include?(word[0]) 
     word + 'ay' 
    else 
     if ['a', 'e', 'i', 'o', 'u'].include?(word[1]) 
     word[1..-1] + word[0] + 'ay' 
     else 
     word[2..-1] + word[0..1] + 'ay' 
     end 
    end 
    end 
    phrase.join(' ') 
end 
PS:我不太了解不多的Pig Latin,但你应该从这里找到答案。
回答:
您无法操作正在运行的word。而是使用each_with_index操纵数组:
def translate(phrase)     phrase_array = phrase.split 
    phrase_array.each_with_index do |word, i| 
    if ['a', 'e', 'i', 'o', 'u'].include?(word[0]) 
     phrase_array[i] = word + 'ay' 
    else 
     ['a', 'e', 'i', 'o', 'u'].include?(word[1])? 
     phrase_array[i] = word[1..-1] + word[0] + 'ay' : word = word[2..-1] + word[0..1] + 'ay' 
    end 
    end 
    phrase.join(' ') 
end 
以上是 数组枚举无法正常工作? 的全部内容, 来源链接: utcz.com/qa/266745.html



