我有
([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])
是否有分组功能?感谢
答案 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]))