我今天开始学习Ruby,我还不明白如何修改一个有多个条件的数组,我搜索了一下,阅读文档,但是只找到了一个条件。
我尝试了map,filter_map,for in,和其他方法,但我不知道做错了什么。
def test_fuzz_buzz
input = [2, 15, 7, 9, 45]
expected_output = ["bug!", "fizzBuzz", "bug!", "fizz", "fizzBuzz"]
assert_equal expected_output, Challenges.fizz_buzz(input)
input = [7, 9]
expected_output = ['bug!', 'fizz']
assert_equal expected_output, Challenges.fizz_buzz(input)
input = [9, 25]
expected_output = ['fizz', 'buzz']
assert_equal expected_output, Challenges.fizz_buzz(input)
end
我的目标是取代3倍的泡沫,5倍的嗡嗡声或取代错误!
def fizz_buzz(numbers_arr)
# numbers_arr.each { |number|
# number = 'fizz' if number % 3 === 0
# number = 'buzz' if number % 5 === 0
# number = 'bug!' if number != 'fuzz' || 'buzz'
# }
# numbers_arr.map { |number|
# number = 'fizz' if number % 3 === 0
# number = 'buzz' if number % 5 === 0
# number = 'bug!' if number != 'fuzz' || 'buzz'
# }
numbers_arr.filter_map { |number|
number = 'fizz' if number % 3 === 0
number = 'buzz' if number % 5 === 0
# number = 'bug!' if number != 'fuzz' || 'buzz'
}
numbers_arr.select { |number| number % 3 === 0 }.map { |number| number ='fizz' }
end
1条答案
按热度按时间cx6n0qe31#
你的问题是,这不是
#map
及其同类的工作方式。它们将Enumerable
对象Map到它们传递的块中最后一个求值的表达式。这看起来像是在工作,因为在下面的代码中,表达式x = 5
求值为5
。但是,如果我们在最后一个表达式上加上一个条件,我们会看到它没有做你所期望的事情。
您可能期望
[1,5,3]
,但由于第一个和最后一个元素不满足条件,该表达式的计算结果为nil
。不过,使用条件表达式作为最后一个元素也可以。
一个二个一个一个