2013-01-20 75 views
2

给定一个零和一个向量,我想计算一个值为1的条目数。然而,矢量可能非常长,我只关心矢量是否有零个,一个或多个入口值为1的值。如何计算向量中的个数,给定一个上限

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

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

我能否限制过滤器(或使用一些其他的方式),以避免前往载体的任何三个以上的元素,在这种情况下?

回答

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 
+0

谢谢!这是有道理的。 –

相关问题