我在 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

在我的测试中,最后一个是最快的。