我正在Clojure中与JFreeChart一起工作,遇到了我需要帮助的情况。
JFreeChart的DefaultXYDataset具有一个addSeries方法,该方法用于向图表添加序列。数据应该是包含two arrays的数组,它们是特定于类型的(双精度数组)。因此,我编写了以下代码,认为它可以正常工作,但我得到了
ClassCastException
,即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
将两个嵌套数组转换为#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
,但这将导致我循环遍历两个序列并将其值分配给主数组。我试图避免这种情况,因为两个数据集可能很大,甚至每个都高达300k items。
这是二维数组,而不是两个数组对象组成的数组。您需要使用make-array
和aset-double
来创建所需的数组。
user=> (class (make-array Double/TYPE 2 2))
[[D