scala - 如何在 Scala 中实现由数组支持的不可变 IndexedSeq

标签 scala scala-collections

我正在尝试在数值处理库中实现张量(多维数组)。 Tensor 实现的签名如下所示(删除签名中不相关的部分):

final class Tensor[V](val data: Array[V], val shape: IndexedSeq[Int])

这里关注的问题之一是 IndexedSeq[Int] 的性能(因为它们得到 scala.collection.Vector 的支持)。作为一个数值处理库,性能是一个大问题。我想换掉默认的 Vector -支持IndexedSeqArray -支持的一个。

我想知道执行此操作的最佳方法是什么(而不只是从 Scala 集合中复制 IndexedSeq 的完整代码并更改相关部分。)谢谢。

最佳答案

这样就够了吗?

final class FastVector[+T](a: Array[T]) extends IndexedSeq[T] {
  override def apply(idx: Int) = a(idx)
  override def length = a.length
}

然后,您将使用 FastVector 作为您的 IndexedSeq 类型。 IndexedSeq 的所有功能均由该特征的具体方法提供,因此 mapfilter 等都可供您使用也是如此。

关于scala - 如何在 Scala 中实现由数组支持的不可变 IndexedSeq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49256315/

相关文章:

Scala:版本之间的二进制不兼容

java - Apache Commons ZipArchiveOutputStream 在添加带有非 ASCII 字符的文件名时中断

java - 与 Java 交互时的 Scala 类型/集合,反之亦然

scala - 尽管是包装器,但 CollectionConverters 的性能代价高昂?

scala - 在 Scala 中交换集合元素的好方法是什么?

scala collection.Map 不能添加到

scala - 如何使用Scala actor充分利用所有核心?

javascript - 如何将 log4javascript 与 ScalaJS/PhantomJS 一起使用

java - Scala 相当于 new HashSet(Collection)

scala - Scala 中的好友访问