Arrays 从Clojure中的特定类型数组创建泛型数组
我在clojure与JFreeChart合作,遇到了一个需要帮助的情况 JFreeChart的DefaultXYDataset有一个addSeries方法,用于将series添加到图表中。数据应该是一个数组,其中包含特定于类型的数据(双精度数组)。因此,我编写了以下代码,认为它可以工作,但我得到了一个Arrays 从Clojure中的特定类型数组创建泛型数组,arrays,clojure,jfreechart,Arrays,Clojure,Jfreechart,我在clojure与JFreeChart合作,遇到了一个需要帮助的情况 JFreeChart的DefaultXYDataset有一个addSeries方法,用于将series添加到图表中。数据应该是一个数组,其中包含特定于类型的数据(双精度数组)。因此,我编写了以下代码,认为它可以工作,但我得到了一个 ClassCastException该类[Ljava.lang.Object;不能强制转换为类[[D”([Ljava.lang.Object;和[[D位于加载程序“引导”的模块java.base中
ClassCastException
该类[Ljava.lang.Object;不能强制转换为类[[D”([Ljava.lang.Object;和[[D位于加载程序“引导”的模块java.base中)
(doto\u数据集)
(.将系列“S1”(添加到数组中)
[]
(双阵列(范围10))
(双阵(射程10‘‘‘‘‘‘)
查看之后,我意识到to array
将两个嵌套数组转换为对象[“[Ljava.lang.object;”0x491223e7”[Ljava.lang.object;@491223e7”]
,而不是预期的对象[“[D”0x4f5cf37”[D@4f5cf37“]#对象[”[D“0x6d895193”[D@6d895193"]
。有没有一种方法可以将它们组合成一个通用数组,而不将它们转换成长数组?可能是除了到数组
之外的另一种方法。欢迎提供任何其他建议。谢谢
编辑:@bfabry-answer将起作用,我可以使用
生成数组
,然后使用aset-double
,但这将导致我在两个序列之间循环,并将它们的值分配给主数组。我试图避免这种情况,因为两个数据集可能相当大,甚至每个都可以。这是二维数组,而不是tw数组o数组对象。您需要使用make array
和aset double
来创建所需的数组
user=> (class (make-array Double/TYPE 2 2))
[[D
也应考虑扩展<代码> ActudioXDATABETS< <代码>。谢谢链接@ TrasGod。我将检查它。目前我正在尝试使用Debug ToxDeaseT来修复。还考虑<代码> FastScatterPlot < /代码>,建议。您的答案是正确的,但我试图避免这一点,因为使用<代码> ASET双将再次出现。在我看来,循环遍历两个集合中的所有项,并将它们分别分配给数组。我正在处理的数据集可能相当大,甚至是300k。我认为循环遍历它们不是一个好主意。您最初提出的方法也是复制所有数据,所以除了循环方法中的常量因子外,不会继续g要发送到JFreeChart的数据元素数量比线性时间快。扩展
AbstractXYDataset
可能有助于减少复制。@andy_Fingerbut我明白你的意思,谢谢。我想问一下,使用cons
而不是conj
是否会更快。我想懒洋洋会不会更容易rk使它更快。我不知道我的头脑中是否有cons
与conj
会产生任何明显的性能差异。实验和测量可以回答这个问题。最多它会改变所涉及的常数因子,而不是线性时间与非线性时间。我知道,常数因子有时确实很重要。