arrays - Scala BigInt 数组

标签 arrays list scala bigint invariants

我正在尝试解决这个问题 http://projecteuler.net/problem=62我被这个错误挂断了:

euler.scala:10: error: type mismatch;
found   : Array[Any]
 required: Array[Int]
Note: Any >: Int, but class Array is invariant in type T.
You may wish to investigate a wildcard type such as `_ >: Int`. (SLS 3.2.10)
    master(perm) = if (master.contains(perm)) master(perm) :+ cube else Array(cube)
                                                           ^
one error found

问题可能是因为 BigInt 试图存储在数组中,但显然不存在 Array[BigInt] 数组这样的东西

下面是我的代码:

import scala.util.control.Breaks._

var m = new scala.collection.mutable.LinkedHashMap[String,Array[Int]]
var master = m.withDefaultValue(Array.empty[Int])
val range = 345 to 9999

    range.foreach { n =>
    val cube = BigInt(n) * n * n
    val perm = cube.toString.map(_.asDigit).mkString("")
    master(perm) = if (master.contains(perm)) master(perm) :+ cube else Array(cube)
}

master.values.foreach { value =>
    if (value.length >= 5) {
        println (Math.cbrt(value(0)))
        break
    }
}

最佳答案

立方体是 BigInt 类型。所以 Array(cube) 的类型是 Array[BigInt]

master(perm)的类型是Array[Int],而你正在尝试做

Array[Int] :+ BigInt => Array[Int], which does not work.

建议:将所有数组设为 BigInt 类型。

所以:

var m = new scala.collection.mutable.LinkedHashMap[String,Array[BigInt]]
var master = m.withDefaultValue(Array.empty[BigInt])

还可以考虑使用列表而不是数组。那个 :+ 运算符每次都会分配一个新数组。如果您使用列表,它们会更智能,会更有效地执行这些不可变操作。

关于arrays - Scala BigInt 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19437297/

相关文章:

java - 数组输出问题?

algorithm - 在 Scala 中合并二叉树

c++ - 不使用 new 的动态二维数组

python - 从 Python 中的数字列表创建包含五个元素的列表

SwiftUI - 列表中的自定义滑动操作

r - 如何返回向量之间的唯一元素,同时保留这些唯一元素的源向量?

scala - `<:<`的隐式解析链是什么

scala - 不使用惰性值的 SBT 多项目构建

java - 尝试将一个类制作成二维数组

用于传递 HTML 广播默认值的 JavaScript 数组