2

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

使用这里给出的方法,我可以计算向量中的个数。

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

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

4

1 回答 1

6

过滤器是懒惰的,所以只会做需要的工作。由于您只关心没有 1、一个 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
于 2013-01-20T14:23:58.140 回答