如何添加到列表?斯卡拉

时间:2015-02-04 02:29:47

标签: scala

我对scala完全陌生,并且不明白为什么这个列表没有正确显示。当我运行程序时,我只得到List()作为输出,我应该得到参数平方的所有元素的列表。这应该非常简单,但是:+操作是我在网上找到的,它不起作用。

def Squareall (l: List[Int]): List[Int] ={
  var r : List[Int]=List()
  for (i<-0 to l.length-1){
    r:+ l(i)*l(i)
  }
  return r
}

2 个答案:

答案 0 :(得分:7)

在Scala中,通常可以避免示例中的命令式编码样式。 Scala中的for是一个表达式,意味着它会产生一个值,因此您可以直接转换输入列表。要使用for转换输入List,您可以执行以下操作:

def squareAll (l: List[Int]): List[Int] = {
  for (i <- l) yield i * i
}

如果您没有提供yield语句,则for会导致Unit类型,类似于Java中的void。这种for循环的风格通常用于生成side effects,例如打印到屏幕或写入文件。如果您真的只想转换数据,则无需创建和操作生成的List。 (此外,Scala中的方法名称通常是#34;骆驼套装&#34;。)

大多数人可能会使用List.map方法,但是:

def squareAll (l: List[Int]) = l.map((x: Int) => x * x)

甚至......

def squareAll (l: List[Int]) = l.map(Math.pow(_, 2.0))

答案 1 :(得分:3)

您必须将新创建的列表分配给r,如下所示:

r = r:+ l(i)*l(i)

这是因为默认情况下,Scala中的List是不可变的,而:+会返回一个新列表,但不会更新旧列表。

当然,列表scala.collection.mutable.MutableList也有可变的变体。您可以使用.++=方法来增加集合。

val mutableList = scala.collection.mutable.MutableList(1, 2)
mutableList.++=(List(3, 4))