给定上限,如何计算向量中的1的数量

时间:2013-01-20 13:55:57

标签: clojure

给定1和0的向量,我想计算值为1的条目数。但是,向量可能很长,我只关心向量是否有零个,一个或多个条目,其值为一个。

使用给定here的方法,我可以计算向量中的数量。

(count (filter #{1} [1 0 1 0 0 1 1]))

在这种情况下,我可以限制过滤器(或使用其他方法)以避免访问向量的三个以上元素吗?

1 个答案:

答案 0 :(得分:6)

过滤器是懒惰的,因此只会根据需要执行尽可能多的工作。由于你只关心没有1个,1个或两个或更多个,你只需要检查过滤序列1的两个元素,所以在计算之前只需要take 2

user=> (count (take 2 (filter #{1} [1 0 1 0 0 1 1])))
2
user=> (count (take 2 (filter #{1} [0 0 0 0 0 0 0])))
0
user=> (count (take 2 (filter #{1} [0 0 0 0 0 0 1])))
1
user=> (def rare (repeatedly #(if (< (rand) 0.0001) 1 0)))
#'user/rare
user=> (take 10 rare)
(0 0 0 0 0 0 0 0 0 0)
user=> (count (take 2 (filter #{1} rare)))
2