我有阵列。它们的值为0
或浮点数。我想知道我的数组中有多少非零值(命中)。
所以我使用了以下注入。 entry[5]
是我存储点击次数的地方,entry[6..56]
是数据的位置:
entry[5] = entry[6..56].inject {|memo, n| n!=0? memo+=1 : memo+=0}
此函数大部分都有效,但有时会返回340.1
之类的随机值。任何人都可以对此有所了解吗?
答案 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?)