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

whb*_*whb 10 scala

为什么这不是有效的?

    var a = List[(String,String)]
    a = a :: ("x","y")
Run Code Online (Sandbox Code Playgroud)

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

eli*_*sah 19

这里有两个错误.

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

我相信你要做的是以下几点

var a : List[(String,String)] = List()
Run Code Online (Sandbox Code Playgroud)

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

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

 a = a:+(("x","y"))
Run Code Online (Sandbox Code Playgroud)

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


Ben*_*ich 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
Run Code Online (Sandbox Code Playgroud)

注意,那就是,默认实例Traversable,Iterable,Seq,和LinearSeq所有也返回List,这样你就可以使用这些呢,(例如Seq.empty[(String, String)]).

然后你可以使用:+以下方法添加元素:

val newList = list :+ ("x", "y")
val newList = list :+ ("x" -> "y")
Run Code Online (Sandbox Code Playgroud)

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

val newList = ("x" -> "y") :: list
Run Code Online (Sandbox Code Playgroud)

如果您希望它们保持关联状态,您也可以使用常规点语法调用它们,就像常规方法一样:

val newList = list.::("x" -> "y")
Run Code Online (Sandbox Code Playgroud)

这种方法是正确关联的原因是因为它预先构成了元素,允许你做以下事情:

val newList = ("x" -> "y") :: ("a" -> "b") :: list
Run Code Online (Sandbox Code Playgroud)

并保留预期的顺序(与代码中出现的顺序相同).