You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ruby中通过多条件修改数组(FizzBuzz场景)

Ruby多条件数组替换(FizzBuzz实现)

先给出符合需求的实现代码:

def fizz_buzz(numbers_arr)
  numbers_arr.map do |number|
    if number % 15 == 0
      'fizzBuzz'
    elsif number % 3 == 0
      'fizz'
    elsif number % 5 == 0
      'buzz'
    else
      'bug!'
    end
  end
end

你的尝试未成功的原因

  1. 条件判断顺序错误
    你先判断3的倍数再判断5的倍数,导致同时是3和5倍数的数(比如15)会被先设为fizz,随后又被覆盖成buzz,永远无法得到fizzBuzz。必须优先判断15的倍数(3和5的最小公倍数)。

  2. 逻辑表达式错误
    你写的number != 'fuzz' || 'buzz'存在两个问题:

    • 拼写错误:fuzz应为fizz;
    • 逻辑错误:|| 'buzz'中'buzz'是真值,导致该条件永远成立,所有元素都会被设为bug!。实际上不需要额外判断,用else兜底即可。
  3. 方法使用错误

    • each:遍历数组但不会修改原数组,块内的number是局部变量,修改它对原数组无影响;
    • filter_map:会过滤掉块返回nil的元素,你的块内无返回值,最终会得到空数组,不适合需要保留所有元素的场景;
    • 最后一行的select + map:仅处理3的倍数,其余元素被丢弃,返回数组长度与输入不一致,不符合测试用例要求。

代码逻辑说明

  • 用map遍历数组,每个元素根据条件返回对应值,最终生成新的结果数组;
  • 优先判断number % 15 == 0(同时是3和5的倍数),返回fizzBuzz;
  • 依次判断是否为3的倍数、5的倍数,分别返回fizz、buzz;
  • 剩余情况用else兜底,返回bug!。

内容的提问来源于stack exchange,提问作者Clever Júnior

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 12:25:14