Ruby:生成一个数组

时间:2014-03-06 03:29:33

标签: ruby refactoring

我正在尝试自动化测试。有没有更好的方法来解决这个问题?我正在尝试创建一个只包含三的倍数而不包含其他内容的数组。

(1...100).each_with_object([]) { |i, a| a << i if i % 3 == 0 }.reject { |i| i % 5 == 0 }

3 个答案:

答案 0 :(得分:2)

为什么map数字1到33除以3,然后拒绝5的倍数?

(1..33).map { |i| i * 3 }.reject { |i| i % 5 == 0 }

答案 1 :(得分:1)

  

我正在尝试创建一个只包含三个倍数的数组,而不是其他任何内容。

使用Numeric#step枚举器:

3.step(100, 3).to_a

创建三个倍数,最多100个。

您的代码似乎还可以过滤掉五个代码。你可以过滤掉它们:

3.step(100, 3).reject { |i| i % 5 == 0 }

或者你可以做一些完全不同的事情:

require 'set'
((1..100).to_set - 3.step(100, 3) - 5.step(100, 5)).to_a

比拒绝方式更易读,但可能有点慢。

答案 2 :(得分:0)

百万和1种迭代ruby的方法

(1..100).collect{|i| i if i % 3 == 0 && i % 5 != 0}.compact!
(1..100).select{|i| i if i % 3 == 0 && i % 5 != 0}

这是另一个,它读得非常好

(1..100).find_all{|i| i % 3 ==0 && i % 5 !=0}