gpt4 book ai didi

arrays - 在Scala中创建大量数组

转载 作者:行者123 更新时间:2023-12-02 09:31:45 26 4
gpt4 key购买 nike

我们知道,在scala中,创建一个2D数组(矩阵),使用的是ofDim:

def ofDim[T]( n1: Int, n2: Int ): Array[Array[T]]

其中参数仅接受 Int 类型。

如果我想创建一个包含大量元素的二维数组,那么应该使用 long 呢?除了 ofDim,我还能使用什么?

谢谢。

最佳答案

即使您有足够的内存来容纳超过 2^31-1 个数据类型的元素,JVM 也会将数组的长度限制为最多 2^31-1。

所以简短的回答是:你不能。而且您可能没有足够的内存。

但是如果这样做,您可以创建自己的类,将数组数组包装为单个数组:

class BigArray[@specialized T: reflect.ClassTag](size: Long) {
private val data = Array.ofDim(1 + (size >> 20).toInt, math.min(size, 1L << 20).toInt)
def apply(i: Long): T = data((i >> 20).toInt)((i & ((1 << 20)-1)).toInt)
def update(i: Long, value: T) {
data((i >> 20).toInt)((i & ((1 << 20)-1)).toInt) = value
}
}

然后使用它。请注意,尝试将这么多数据放入大多数现有集合类型中都会破坏它,因此您可能只需要以旧式(手动)方式对其进行索引。

现在您已经有了这个,您可以创建 BigArrays 的 BigArrays 并手动索引它们以放置元素(并初始化空 BigArrays)。

但是可能有更好的方法来解决让您想要创建如此巨大的数组的问题。

关于arrays - 在Scala中创建大量数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37559027/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com