【问题标题】:Using `map` to solve 'FizzBuzz'使用 `map` 解决 'FizzBu​​zz'
【发布时间】:2016-01-28 18:16:56
【问题描述】:

我厌倦了使用map 来解决 fizzbuzz。

def fizzbuzz(n)
    array =(1..n).to_a
    array.map{|x| 
        if x % 3 == 0 && x % 5 == 0
         x = 'FizzBuzz'
        elsif x % 3 == 0 
         x = 'Fizz'
        elsif x % 5 == 0
         x = 'Buzz'
        end
    } 
   array
end

不知何故,它不起作用。你知道怎么回事吗?

【问题讨论】:

  • 怎么不行?
  • 显示错误,否则您将无法获得帮助。

标签: ruby fizzbuzz


【解决方案1】:

方法map 不会改变原始数组。请改用 bang 版本 map!

【讨论】:

    【解决方案2】:

    按照@tmc 的建议使用map! 并尝试其他一些更改:

    def fizzbuzz(n)
        array =(1..n).to_a
    
        array.map!{|x| 
            if x % 3 == 0 && x % 5 == 0
             x = 'FizzBuzz'
            elsif x % 3 == 0 
             x = 'Fizz'
            elsif x % 5 == 0
             x = 'Buzz'
            else
             x = x
            end
        }
    
       p array
    end
    
    fizzbuzz(10) #=> [1, 2, "Fizz", 4, "Buzz", "Fizz", 7, 8, "Fizz", "Buzz"]
    

    如您所见,我添加了对方法 fizzbuzz 的调用,参数为 10,您可以更改该参数。我已经使用p 来检查数组以及最终的else 语句。

    【讨论】:

    • 你可以去掉x = ,只剩下表达式——假设最后执行的语句是返回值。此外,如果您只使用array.map,则不需要p array。你不需要 array 变量本身 - 你可以这样做 (1..n).map
    • @WandMaker 我同意你的建议(尽管我将把它留给 OP 来整理),除非我看不到没有p 或类似的数组是如何返回或打印的?
    • 不用担心。最好通过打印fizzbuzz(...) 方法调用的结果来打印数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    相关资源
    最近更新 更多