Scala MutableLists map-function返回值

时间:2013-01-10 10:16:16

标签: scala

目前我尝试在MutableList上使用map函数,因为它会更优雅,然后使用for循环迭代,imho。

当我执行以下操作时:

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上的map函数不是正确的方法吗?或者有一种从LinearSeq到MutableList的简单方法吗?

2 个答案:

答案 0 :(得分:1)

standard documentation开始:

  

可变列表

     

MutableList由单个链表和指针组成   它指的是该列表的终端空节点。这就是列表   附加一个恒定时间操作,因为它避免了必须遍历   搜索其终端节点的列表。目前是MutableList   Scala中mutable.LinearSeq的标准实现。

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

答案 1 :(得分:1)

正如pagoda_5b所述,mutable.LinearSeq将允许与MutableList相同的操作。通常,您应该直接实例化特征。例如,如果您想要:

  • 映射到商店(键 - >值)对,调用Map()
  • Seq存储事物列表,调用Seq()
  • 设置存储一组内容,调用Set()
  • 具有线性随机访问时间的Seq,调用IndexedSeq()
  • 等。

同样值得注意的是,虽然MutableListLinearSeq都有head个访问时间,但两者都没有随机访问时间,即调用linearSeq(n)将完全n次调用head返回。

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