在 Scala 中从向量创建列表

use*_*935 1 scala

我对 Scala 中一些非常基本的东西感到困惑。我正在读《Atomic Sc​​ala》这本书。我不是一个完整的编程初学者,但我所拥有的经验是相当表面的。没有实际的开发经验,只是修补字符串操作和那个级别的东西。

在本书中,其中一个练习(在参数化类型一节中)是定义一个方法,该方法将向量作为输入并给出一个列表作为输出,其中列表的元素与向量的元素相同。给定的向量可以是任意长度。

我不知道有什么方法可以在没有 for 循环的情况下做到这一点,并且没有将列表视为(至少在开始时)可变的。

这是我尝试过的:

def explicit(v:Vector[Double]):List[Double] = {
    var l = List()
    for (i <- v) {
        l = l :+ i
    }
    l
}
Run Code Online (Sandbox Code Playgroud)

但第四行似乎有问题。它踢出一条错误消息。

我有一种感觉,你可以在没有 for 循环的情况下做一些很酷的事情,你可以直接说“val l = List(~~~在这里插入一些很酷的火箭或其他东西~~~)但是这本书没有”还没有涵盖这个,或者我只是还没有弄清楚。

正如你所看到的,我在这里处于非常基础的水平,所以请尽可能像我五岁那样解释它。;)

编辑补充:我向前看了一点,看起来像几章之后我将学习“地图”方法,如果我准确浏览,它将为这个问题提供解决方案。但那是书的后面。知道如何在没有地图的情况下完成吗?

vpt*_*ron 6

List在 Scala 中是不可变的,“修改” aList实际上会产生List.

map是一个非常有用的功能,List但不会帮助您,它不会更改容器,只会更改包含的值。

我真的不明白你的运动的点,把一个Vector成一个List很简单,只要调用toListVector

scala> val v= Vector(1,2,3)
v: scala.collection.immutable.Vector[Int] = Vector(1, 2, 3)

scala> v.toList
res0: List[Int] = List(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

在第 1 条评论后编辑:是的,简单地调用一个练习是没有意义的toList:) 很难真正知道预期的是什么,章节/部分的主要主题是什么?

另一种方法是:List(Vector(1,2,3):_*)。@Rex Kerr 的回答也很好。