提问人:Clever Júnior 提问时间:2/12/2023 更新时间:2/12/2023 访问量:81
如何在 Ruby 中使用多个条件修改数组
How to modify array using multiple conditions in Ruby
问:
我今天开始学习 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赞
Chris
2/12/2023
#1
你的问题是这不是它的工作方式。它们将对象映射到它们传递的块中计算的最后一个表达式。这看起来可以工作,因为在下面,表达式的计算结果为 。#map
Enumerable
x = 5
5
irb(main):001:0> [1,2,3].map { |x| x = 5 }
=> [5, 5, 5]
但是,如果我们在最后一个表达式上附加一个条件,我们会看到它没有达到您的期望。
irb(main):002:0> [1,2,3].map { |x| x = 5 if x == 2 }
=> [nil, 5, nil]
您会期望,但由于第一个和最后一个元素不满足条件,因此该表达式的计算结果为 。[1,5,3]
nil
不过,使用条件表达式作为最后一个元素是可行的。
def fizz_buzz(nums)
nums.map do |n|
if n % 15 == 0
"fizzBuzz"
elsif n % 5 == 0
"Buzz"
elsif n % 3 == 0
"fizz"
else
"bug!"
end
end
end
irb(main):016:0> fizz_buzz [2, 15, 7, 9, 45]
=> ["bug!", "fizzBuzz", "bug!", "fizz", "fizzBuzz"]
上一个:在 Ruby 中使用菜单定义方法
下一个:Ruby:如何使类返回为真?
评论
15
45
3
5
'fizz'
'buzz'
'fizzBuzz'