以下是一些值。每个都是一系列的升序(或其他分组)值。在Clojure中分区分区?
(def input-vals [[[1 :a] [1 :b] [2 :c] [3 :d] [3 :e]]
[[1 :f] [2 :g] [2 :h] [2 :i] [3 :j] [3 :k]]
[[1 :l] [3 :m]]])
我可以按价值分割它们。
=> (map (partial partition-by first) input-vals)
((([1 :a] [1 :b]) ([2 :c]) ([3 :d] [3 :e])) (([1 :f]) ([2 :g] [2 :h] [2 :i]) ([3 :j] [3 :k])) (([1 :l]) ([3 :m])))
但是,我得到了3个分区序列。我想要一个单独的分区组序列。
我想要做的是返回单个惰性序列(可能)是连接的各个分区的惰性序列。例如我想产生这样:
((([1 :a] [1 :b] [1 :f] [1 :l]) ([2 :c] [2 :g] [2 :h] [2 :i]) ([3 :d] [3 :e] [3 :j] [3 :k] [3 :m])))
请注意,并非所有的值出现在所有序列(有第三矢量没有2
)。
这当然是我的问题的简化。真实的数据是来自非常大的文件的一组惰性流,所以什么都不能实现。但我认为上述问题的解决方案是解决我的问题。
随意编辑标题,我不太确定如何表达它。
您是否知道您改变了多少问题? :p – Chiron
我改变了内容,但没有改变我正在寻找的功能的应用。 – Joe
感谢您的耐心人。我试图通过使用简单的值来尽可能简化问题。 (也造成了repl中的拼写错误)。我试图实现的目标没有改变,但凯龙的答案使用了身份,这意味着我必须证明用于分区的投影的价值(在本例中为“第一”)具有共同的价值,但价值他们自己('[1:a]')是相互独特的。 – Joe