我在 rails 中找不到奇数或偶数
I cant find odd or even in rails
即“20200612”,这个程序执行2+2+0+1,我要的是2+2+6+2所有偶数的和
(task.year.to_s +
task.month.to_s +
task.numberofemployer.to_s).split(//)
.map{|p| p.to_i}
.select.each_with_index { |_, p| p.even? }.sum
在那种情况下你必须删除 each_with_index
,因为你需要检查当前元素是否是偶数,而不是 '20200612'.split(//)
:
中该元素的索引
'20200612'.chars.map(&:to_i).select(&:even?).sum
# 12
如果您使用来自 each_with_index
:
的生成值,会发生这种情况
[[2, 0], [0, 1], [2, 2], [0, 3], [0, 4], [6, 5], [1, 6], [2, 7]]
even even even even
你有当前元素和它的索引,你正在检查索引是否是偶数,这就是为什么你得到 2, 2, 0, 1
似乎 chars、map、select 和 sum 的每个方法都有自己的循环,所以,我认为太多了,谈论公认的解决方案。
丑陋的是下面的解决方案是两行,但只有一个循环,用基准检查:
@a = 0
'20200612'.gsub(/[2468]/) { |v| @a += v.to_i; ''}
# puts @a => 12
这另一个,也更快:
'20200612'.chars.inject(0) { |sum, v| v.to_i.even? ? sum + v.to_i : sum }
# 12
这是另一个好方法:
@a = 0
'20200612'.chars.each { |v| @a += v.to_i.even? ? v.to_i : 0 }
# puts @a => 12
在我的测试中,最后一个是最快的。
即“20200612”,这个程序执行2+2+0+1,我要的是2+2+6+2所有偶数的和
(task.year.to_s +
task.month.to_s +
task.numberofemployer.to_s).split(//)
.map{|p| p.to_i}
.select.each_with_index { |_, p| p.even? }.sum
在那种情况下你必须删除 each_with_index
,因为你需要检查当前元素是否是偶数,而不是 '20200612'.split(//)
:
'20200612'.chars.map(&:to_i).select(&:even?).sum
# 12
如果您使用来自 each_with_index
:
[[2, 0], [0, 1], [2, 2], [0, 3], [0, 4], [6, 5], [1, 6], [2, 7]]
even even even even
你有当前元素和它的索引,你正在检查索引是否是偶数,这就是为什么你得到 2, 2, 0, 1
似乎 chars、map、select 和 sum 的每个方法都有自己的循环,所以,我认为太多了,谈论公认的解决方案。
丑陋的是下面的解决方案是两行,但只有一个循环,用基准检查:
@a = 0
'20200612'.gsub(/[2468]/) { |v| @a += v.to_i; ''}
# puts @a => 12
这另一个,也更快:
'20200612'.chars.inject(0) { |sum, v| v.to_i.even? ? sum + v.to_i : sum }
# 12
这是另一个好方法:
@a = 0
'20200612'.chars.each { |v| @a += v.to_i.even? ? v.to_i : 0 }
# puts @a => 12
在我的测试中,最后一个是最快的。