如何在Ruby中使用多个条件修改数组

nr7wwzry  于 2023-02-15  发布在  Ruby
关注(0)|答案(1)|浏览(117)

我今天开始学习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
cx6n0qe3

cx6n0qe31#

你的问题是,这不是#map及其同类的工作方式。它们将Enumerable对象Map到它们传递的块中最后一个求值的表达式。这看起来像是在工作,因为在下面的代码中,表达式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
不过,使用条件表达式作为最后一个元素也可以。
一个二个一个一个

相关问题