我々はScalaで、(マトリックス)を2次元配列を作成することを知って、アレイの多数の作成:、ofDimが使用されるスカラ
def ofDim[T](n1: Int, n2: Int): Array[Array[T]]
パラメータは、int型を受け入れる場合。
長い間使用されるはずの、大量の要素を持つ2D配列を作成したい場合はどうすればよいですか? ofDimの代わりに、他に何が使えますか?
ありがとうございました。
我々はScalaで、(マトリックス)を2次元配列を作成することを知って、アレイの多数の作成:、ofDimが使用されるスカラ
def ofDim[T](n1: Int, n2: Int): Array[Array[T]]
パラメータは、int型を受け入れる場合。
長い間使用されるはずの、大量の要素を持つ2D配列を作成したい場合はどうすればよいですか? 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を初期化する)ことができます。
しかし、このような巨大な配列を作成したいという問題を解決するには、おそらくより良い方法があります。