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

问题描述 投票:0回答:2

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

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

java arrays list clojure sequence
2个回答
16
投票

是的,有一种方法可以将数组转换为列表!代码

(seq java-array-here)
会将数组转换为
ArraySeq
,它实现
ISeq
,因此可以像任何其他 Clojure sequence 一样对待。


0
投票

@jpaugh 是对的:通常您只需要一个 seq 即可。许多 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 的回答提供了另一个例证。

© www.soinside.com 2019 - 2024. All rights reserved.