Ruby Inject Block表现得很奇怪?

时间:2014-04-17 10:31:09

标签: ruby block inject

我有阵列。它们的值为0或浮点数。我想知道我的数组中有多少非零值(命中)。

所以我使用了以下注入。 entry[5]是我存储点击次数的地方,entry[6..56]是数据的位置:

entry[5] =  entry[6..56].inject {|memo, n| n!=0? memo+=1 : memo+=0}

此函数大部分都有效,但有时会返回340.1之类的随机值。任何人都可以对此有所了解吗?

2 个答案:

答案 0 :(得分:2)

似乎您缺少备忘录的初始值

entry[6..56].inject(0) {|memo, n| n != 0 ? memo += 1 : memo += 0}

如果未指定初始值,则备忘录将设置为序列的第一个元素。如果它是一个浮点数,你将得到一个浮点数。

请参阅Arup的回答,找出解决问题的更为惯用的方法。

答案 1 :(得分:2)

您也可以使用Array#count#nonzero?

来做同样的事情
entry[5] = entry[6..56].count(&:nonzero?)