我有一个非常大的懒惰序列,我想把它转换成一个集合。我知道序列中不同元素的数量很少,所以我很容易将该集合放入内存中。但是,我可能无法将整个懒惰的seq放入内存中。我想做(进入#{} my-lazy-seq)
,但我想到,根据到
的实现方式,这可能会拉动整个seq一次进入内存。
进入
会在操作时保持序列的头部吗?
答案 0 :(得分:6)
我没有看到任何增加的使用量(需要一分钟左右)
user=> (into #{} (take 1e8 (cycle [:foo :bar])))
#{:bar :foo}
更精确的证据是检查into
reduce
,我们认为这只是对(defn into
([to from]
;...
(reduce conj to from)))
的一种奇特的看法:
reduce
如果into
保留在头部,那么reduce
会这样做。但我不认为 mVideoView.suspend();
mVideoView.stopPlayback();
mVideoView = null;
会这样做。
答案 1 :(得分:3)
补充@ progo的答案,你可以随时使用
(source into)
检查repl中into
的源代码。这样可以节省一些时间查看加长的core.clj中的行。