将具有相同第一元素的向量分组到向量列表中

时间:2015-06-17 15:53:58

标签: clojure

我有

([AA moo foo boo][AA soo doo foo][BB woo roo too][BB koo ooo yoo])

我需要对它进行分组,以便获得具有相同第一个元素的向量列表:

([AA moo foo boo][AA soo doo foo])([BB woo roo too][BB koo ooo yoo])

是否有分组功能?感谢

1 个答案:

答案 0 :(得分:4)

确实存在,它的名字为group-by

(vals (group-by first '([AA moo foo boo]
                        [AA soo doo foo]
                        [BB woo roo too]
                        [BB koo ooo yoo])))
;; => ([[AA moo foo boo] [AA soo doo foo]]
;;     [[BB woo roo too] [BB koo ooo yoo]])

group-by会返回用于分组的值的映射以及组 - 因此,由于您只对这些组感兴趣,因此您需要使用vals来访问它们。

或者,如果元素已经是正确的顺序(即所有以AA开头的内容出现在以BB开头的那些内容之前,依此类推),您可以使用partition-by:< / p>

(partition-by first '([AA moo foo boo]
                      [AA soo doo foo]
                      [BB woo roo too]
                      [BB koo ooo yoo]))
;; => (([AA moo foo boo] [AA soo doo foo])
;;     ([BB woo roo too] [BB koo ooo yoo]))