将 Java 数组转换为 Clojure 列表或序列?

Convert a Java array into a Clojure list or sequence?

提问人:jpaugh 提问时间:3/11/2016 最后编辑:jpaugh 更新时间:11/11/2023 访问量:3194

问:

如何将 Java 数组转换为 Clojure 序列数据结构,例如列表或其他序列?

这个问题显示了如何反向;Clojure 文档展示了如何创建、改变和读取数组;但是有没有一种内置的方法可以将它们转换为列表或其他一些 Clojure 原生序列?

数组 列表 clojure 序列

评论

0赞 jpaugh 3/11/2016
我只是想要一个 Clojure 原生数据类型,这样我就可以更轻松地使用 repl 来使用它。我看到向量不同,所以我将删除它。

答:

16赞 jpaugh 3/11/2016 #1

是的,有一种方法可以将数组转换为列表!该代码会将数组转换为实现 的数组,因此可以像对待任何其他 Clojure 序列一样对待。(seq java-array-here)ArraySeqISeq

评论

1赞 Mars 11/6/2023
通常,这是正确的,但通常不会对 的结果进行操作。不过,Pop 将在列表上操作。popseq
1赞 Mars 11/6/2023 #2

@jpaugh是对的:通常,您只需要一个序列。许多 clojure 集合函数适用于许多不同的结构,包括 seq。但是,如果您需要其他集合类型,通常可以使用:into

(def java-array (long-array (range 3)))
(into () java-array) ;=> (2 1 0)
(into [] java-array) ;=> [0 1 2]

请注意,用于创建列表会颠倒输入顺序。into

人们通常可以像使用 Clojure 集合一样使用 Java 数组。我建议在 REPL 的某些测试代码中假装数组是集合,然后看看会发生什么。通常它有效。例如:

(nth java-array 1) ;=> 1

@jpaugh的回答提供了另一个例证。

评论

0赞 jpaugh 11/11/2023
喂养我的自我的道具!9-2