Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala集合转换_Scala_Scala Collections - Fatal编程技术网

scala集合转换

scala集合转换,scala,scala-collections,Scala,Scala Collections,在不同的scala.collection对象之间进行转换最有效的方法是什么 例如 我想得到scala.collection.mutable.ArrayBuffer 根据需要,可以先转换为缓冲区,然后再转换为阵列缓冲区。对吗 一般来说,我可以通过scala集合的共同祖先进行任何转换吗?(在前面的示例中,公共祖先是缓冲区) PS我读过,但找不到关于各种类型之间的一般转换的任何信息(我知道类似.toArray的方法) thx语法方面最有效的方法应该是2.10中介绍的方法: def to[Col[_]]

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

例如

我想得到
scala.collection.mutable.ArrayBuffer

  • 根据需要,可以先转换为
    缓冲区
    ,然后再转换为
    阵列缓冲区
    。对吗

  • 一般来说,我可以通过scala集合的共同祖先进行任何转换吗?(在前面的示例中,公共祖先是
    缓冲区

  • PS我读过,但找不到关于各种类型之间的一般转换的任何信息(我知道类似.toArray的方法)


    thx

    语法方面最有效的方法应该是2.10中介绍的方法:

    def to[Col[_]]: Col[A]
    
    通过复制所有元素将此集合转换为另一个集合。 注意:对于无限大小的集合不会终止

    将其用作
    a.to[scala.collection.mutable.ArrayBuffer]


    从效率上看,除非进行类似向上转换的转换,将子类型转换为更一般的集合,否则转换将涉及复制元素。在您的示例中,将列表缓冲区转换为缓冲区然后再转换为数组缓冲区并不重要——您可以直接使用
    to
    执行此操作,因为这会导致将元素从链接列表复制到数组中。

    回答问题2:

    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)
    
    只要保持兼容性,您可以根据需要转换它们:

    scala> res0.to[Map]
    <console>:12: error: scala.collection.mutable.Map takes two type parameters, expected: one
                  res0.to[Map]
                          ^
    
    scala>res0.to[Map]
    :12:错误:scala.collection.mutable.Map接受两个类型参数,应为:一个
    res0.to[Map]
    ^
    
    谢谢你的回答。只有一个小问题:a.to[scala.collection.mutable.ArrayBuffer[Int]]应该改为a.to[scala.collection.mutable.ArrayBuffer],因为ArrayBuffer不带类型参数。你说得对-虽然数组缓冲区带类型参数,但
    to
    方法带的类型更高,并根据元素的类型对其进行实例化
    A
    scala> res0.to[Map]
    <console>:12: error: scala.collection.mutable.Map takes two type parameters, expected: one
                  res0.to[Map]
                          ^