簡體   English   中英

在 Clojure 中從特定於類型的數組創建通用數組

[英]Create generic array from type specific arrays in Clojure

我正在 clojure 中使用 JFreeChart,遇到了需要幫助的情況。

JFreeChart 的 DefaultXYDataset 有一個 addSeries 方法,用於向圖表添加系列。 數據應該是一個包含兩個特定類型數組(雙精度數組)的數組。 因此,我編寫了以下代碼,認為它可以工作,但我得到了ClassCastException class [Ljava.lang.Object; cannot be cast to class [[D ([Ljava.lang.Object; and [[D are in module java.base of loader 'bootstrap') class [Ljava.lang.Object; cannot be cast to class [[D ([Ljava.lang.Object; and [[D are in module java.base of loader 'bootstrap')

(doto _dataset
  (.addSeries "S1" (to-array (conj
                               []
                               (double-array (range 10))
                               (double-array (range 10))))))

在查看之后我意識到to-array將兩個嵌套to-array轉換為#object["[Ljava.lang.Object;" 0x491223e7 "[Ljava.lang.Object;@491223e7"] #object["[Ljava.lang.Object;" 0x491223e7 "[Ljava.lang.Object;@491223e7"]而不是預期的#object["[D" 0x4f5cf37 "[D@4f5cf37"] #object["[D" 0x6d895193 "[D@6d895193"] 有沒有辦法將它們組合到通用數組而不將它們轉換為 long 數組? 也許除了to-array之外的另一種方法。 歡迎任何其他建議。 謝謝。

編輯:@bfabry 答案會起作用,我可以使用make-array然后使用aset-double但這將導致我遍歷兩個序列並將它們的值分配給主數組。 我試圖避免這種情況,因為這兩個數據集可能非常大,每個數據集甚至高達30 萬個項目

那是二維數組,而不是兩個數組對象的數組。 您需要使用make-arrayaset-double來制作您想要的數組。

user=> (class (make-array Double/TYPE 2 2))
[[D

https://clojuredocs.org/clojure.core/make-array

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM