0

目前我尝试在 MutableList 上使用 map 函数,因为它会比使用 for 循环迭代更优雅,恕我直言。

当我执行以下操作时:

scala> ml
res2: scala.collection.mutable.MutableList[Double] = MutableList(1.0, 2.0)

所以我有一个像这样的 MutableList,现在我做了:

scala> ml.map{ t:(Double) => t+0.2}
res3: scala.collection.mutable.LinearSeq[Double] = MutableList(1.2, 2.2)

我得到了一个 LinearSeq。我想要一个 MutableList 回来。我认为 MutableLists 上的映射函数不是正确的方法吗?或者有没有一种简单的方法可以从 LinearSeq 到 MutableList?

4

2 回答 2

1

标准文档

可变列表

MutableList由一个链表和一个指向该链表终端空节点的指针组成。这使得 list append 是一个常数时间的操作,因为它避免了遍历列表来搜索它的终端节点。MutableList目前是Scala中mutable.LinearSeq的标准实现。

这意味着返回LinearSeq的实际上是作为一个MutableList=> 相同的访问时间实现的

于 2013-01-10T10:43:22.967 回答
1

正如 pagoda_5b 提到的,mutable.LinearSeq将允许与MutableList. 通常,您应该直接实例化特征。例如,如果你想要一个:

  • 映射到存储(键 -> 值)对,调用 Map()
  • Seq 存储事物列表,调用 Seq()
  • 设置存储一组东西,调用Set()
  • 具有线性随机访问时间的 Seq,调用 IndexedSeq()
  • ETC..

还需要注意的是,虽然MutableListLinearSeq都具有恒定head的访问时间,但两者都没有恒定的随机访问时间,即调用linearSeq(n)将需要 n 次调用head才能返回。

例如,如果您想要可变版本,只需添加import scala.collection.mutable并使用mutable.Seq()。(从技术上讲你可以import scala.collection.mutable.Seq,但是用包名作为所有可变集合的前缀被认为是一种很好的编码风格)

于 2013-01-10T18:18:24.070 回答