如何初始化元组列表并在scala中添加项目

时间:2015-03-19 10:37:57

标签: scala

为什么这无效?

    var a = List[(String,String)]
    a = a :: ("x","y")

基本上我想初始化一个元组列表并在列表中添加一个元组。

4 个答案:

答案 0 :(得分:17)

这里有两个错误。

第一个是你试图实例化一个抽象类

的List

我相信你要做的是以下

var a : List[(String,String)] = List()

这将创建一个空元组列表的列表。

第二个是你试图添加一个实际上不是元组的元素,所以我相信你应该尝试以下

 a = a:+(("x","y"))

在这里,您要定义一个元组并将其添加到List a

答案 1 :(得分:10)

您可以通过多种方式实例化空List[(String, String)]

val list = List[(String, String)]()
val list = List.empty[(String, String)]
val list : List[(String, String)] = Nil
val list : List[(String, String)] = List()
val list = Nil : List[(String, String)]
val list : List[(String, String)] = List.empty

另请注意,TraversableIterableSeqLinearSeq的默认实例也都返回List,因此您可以使用那些,(例如Seq.empty[(String, String)])。

然后您可以使用:+添加元素:

val newList = list :+ ("x", "y")
val newList = list :+ ("x" -> "y")

您使用的是cons方法::,用于预先添加。在Scala中,以:结尾的方法是右关联的:

val newList = ("x" -> "y") :: list

如果您希望它们与常规方法保持关联,您也可以使用常规点语法调用它们:

val newList = list.::("x" -> "y")

此方法是正确关联的原因是因为它预先添加元素,允许您执行以下操作:

val newList = ("x" -> "y") :: ("a" -> "b") :: list

并保留预期的顺序(与代码中显示的顺序相同)。

答案 2 :(得分:1)

如果要添加到现有Array中,也可以这样编写添加内容:

var a : List[(String,String)] = List()
a:+=(("x","y"))

答案 3 :(得分:0)

声明中的简单直接方法:

val l=List("type"->"number","min"->"2","step"->"1","value"->"2")