gpt4 book ai didi

arrays - 从 Scala 中的 for 循环产生一个 ArrayBuffer(或其他可变集合类型)

转载 作者:行者123 更新时间:2023-12-04 04:33:10 24 4
gpt4 key购买 nike

在与大型多维数组一起工作的单个矩阵相关方法的范围内,性能和内存使用是至关重要的。我们需要改变数组 的元素到位 因此正在使用 ArrayBuffer 的(不是 Array 的)。

鉴于这个用例,有没有一种方法可以使用 for .. yield 来生成一个 ArrayBuffer(或者至少是一个可变集合)而不是不可变的?

以下代码显示了意图 - 尽管它不会编译:

def classify(inarr: Array[Double], arrarr: Array[Array[Double]], labels: Array[String], K: Int): String = {
...
var diffmat: ArrayBuffer[ArrayBuffer[Double]] = for (row <- arrarr) yield {
(ArrayBuffer[Double]() /: (row zip inarr)) {
(outrow, cell) => outrow += cell._1 - cell._2
}
}

编译错误是:
Expression Array[ArrayBuffer[Double]] does not conform to expected type ArrayBuffer[ArrayBuffer[Double]]

最佳答案

啊......突破的“魔法洒”的案例。它不仅为您提供了您想要的集合类型 - 它可以高效地完成,而不会浪费额外的转换。

object Foo {
import scala.collection.mutable.ArrayBuffer
import scala.collection.breakOut
val inarr: Array[Double] = Array()
val arrarr: Array[Array[Double]] = Array()

var diffmat: ArrayBuffer[ArrayBuffer[Double]] = (for (row <- arrarr) yield {
(ArrayBuffer[Double]() /: (row zip inarr)) {
(outrow, cell) => outrow += cell._1 - cell._2
}
})(breakOut)
}

对此的权威文章(恕我直言)是 Daniel Sobral's answer .

关于arrays - 从 Scala 中的 for 循环产生一个 ArrayBuffer(或其他可变集合类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20228122/

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