2013-05-20 35 views
4

是否有轉換的Clojure列表轉換成Java數組的任何習慣的方法,不是首先將其轉換爲矢量,採用等成陣列(手段,比(into-array (vec my-list))以外的東西,因爲我不想要額外的開銷)?的Clojure - 轉換列表轉換成Java數組

回答

9

你的問題似乎是基於一個錯誤的前提。進入數組不需要使用向量,它需要一個seqable值。的文件(http://clojuredocs.org/clojure_core/clojure.core/into-array)包含使用到陣列上的非載體序列的例子:

user=> (into-array (range 4)) 
#<Integer[] [Ljava.lang.Integer;@63d6dc46> 

user=> (type (range 4)) 
clojure.lang.LazySeq 

user=> (doc range) 
------------------------- 
clojure.core/range 
([] [end] [start end] [start end step]) 
    Returns a lazy seq of nums from start (inclusive) to end 
    (exclusive), by step, where start defaults to 0, step to 1, and end 
    to infinity. 

調用它在列表上的作品一樣好:

user=> (into-array (list 1 2 3)) 
#<Long[] [Ljava.lang.Long;@138297fe> 
1

因爲我需要具體的一個整數數組,我使用了int-array函數,它將list作爲參數。

+0

'INT-array'是用於一個原始數組的Java數組,與'float-array'返回原始數組的Java數組一樣。 –