从Clojure中的向量中删除特定类型的元素

从Clojure中的向量中删除特定类型的元素,clojure,Clojure,我试图找出如何从特定类型的clojure中的向量或列表中删除元素。比如说,我有一个包含字符串和整数的列表。我想创建一个只包含字符串的列表和另一个包含数字的列表 我该怎么做呢 例如,[1 2“你好”3 4“再见”]将变成[1 2 3 4]和[“你好”“再见”] 还有,如果我在一个列表中有一个列表,甚至更深一步,我可能会做同样的事情。你可以使用分组方式: (group-by type [1 2 "hello" 3 4 "Bye"]) ;; returns {java.lang.Long [1 2

我试图找出如何从特定类型的clojure中的向量或列表中删除元素。比如说,我有一个包含字符串和整数的列表。我想创建一个只包含字符串的列表和另一个包含数字的列表

我该怎么做呢

例如,
[1 2“你好”3 4“再见”]
将变成
[1 2 3 4]
[“你好”“再见”]


还有,如果我在一个列表中有一个列表,甚至更深一步,我可能会做同样的事情。

你可以使用
分组方式

(group-by type [1 2 "hello" 3 4 "Bye"]) 
;; returns {java.lang.Long [1 2 3 4], java.lang.String ["hello" "Bye"]}
一种可能的方式:

((juxt filter remove) string? [1 2 "Hello" 3 4 "Bye"])
;; [("Hello" "Bye") (1 2 3 4)]

是的,那可能有用。唯一的问题是访问这两个列表来处理。假设这是一个更大的函数的一部分,我想把所有的数字加起来。我该怎么做呢?在这里使用
类型
通常是个坏主意。试试这个例子:
(按类型分组[1 2 1.0 1/2“hello”“world]”)
。结果可能不是您想要的jcd,您可以通过返回的映射和您想要作为键的类型来访问jcd@leetwinski,他特别要求字符串和整数,但我肯定同意你的观点。在一般情况下,我会使用类似迭戈的答案。这可能会奏效,但我能看到的唯一类似于上一个答案的是,如果我需要访问每个新列表,我将如何处理它,因为它似乎返回两个或多个列表。有没有办法只返回字符串或整数的列表?另外,你能解释一下juxt是做什么的吗?谢谢,如果您只需要一种类型,那么在本例中可以执行
(筛选字符串?您的列表)
(删除字符串?您的列表)
(仅举一个例子)。查看
juxt
的文档,它将两个操作的结果并列(创建一个包含两个列表的列表)。是的,我刚刚发现了这一点,我的解决方案成功了。非常感谢你