首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scala集合转换

scala集合转换
EN

Stack Overflow用户
提问于 2013-03-02 17:06:08
回答 2查看 636关注 0票数 3

在不同的scala.collection对象之间转换最有效的方法是什么?

例如。

代码语言:javascript
复制
 val a=scala.collection.mutable.ListBuffer(1,2,0,3)

我想找scala.collection.mutable.ArrayBuffer

  1. 根据http://docs.scala-lang.org/resources/images/collections.mutable.png,应该可以将其转换为Buffer,然后再转换为ArrayBuffer。对,是这样?
  2. 一般来说,我可以通过scala集合的共同祖先进行任何转换吗?(在前面的示例中,共同的祖先是Buffer)

PS我读过http://docs.scala-lang.org/overviews/collections/introduction.html,但是找不到关于各种类型之间的一般转换的任何东西(我知道类似于.toArray的方法)

thx

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-02 17:22:38

语法方面最有效的应该是2.10中引入的to方法:

代码语言:javascript
复制
def to[Col[_]]: Col[A]

通过复制所有元素将此集合转换为另一个集合。注意:不会终止无限大小的集合.

使用它作为a.to[scala.collection.mutable.ArrayBuffer]

就效率而言,除非您做了一个向上转换,其中您把一个子类型变成一个更一般的集合,转换将涉及复制元素。在您的示例中,如果将列表缓冲区转换为缓冲区,然后转换为数组缓冲区并不重要--您可以使用to直接这样做,因为您可以通过任何一种方式将元素从链接列表复制到数组中。

票数 3
EN

Stack Overflow用户

发布于 2013-03-02 17:23:26

回答问题2:

代码语言:javascript
复制
Welcome to Scala version 2.10.0 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_07).
Type in expressions to have them evaluated.
Type :help for more information.

scala> import collection.mutable._
import collection.mutable._

scala> List(1,2,3,4,5)
res0: List[Int] = List(1, 2, 3, 4, 5)

scala> res0.to[ArrayBuffer]
res1: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3, 4, 5)

scala> res0.to[ListBuffer]
res2: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3, 4, 5)

只要保持兼容性,就可以随意转换它们:

代码语言:javascript
复制
scala> res0.to[Map]
<console>:12: error: scala.collection.mutable.Map takes two type parameters, expected: one
              res0.to[Map]
                      ^
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15177113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档