我正在尝试自动化测试。有没有更好的方法来解决这个问题?我正在尝试创建一个只包含三的倍数而不包含其他内容的数组。
(1...100).each_with_object([]) { |i, a| a << i if i % 3 == 0 }.reject { |i| i % 5 == 0 }
答案 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}