为什么这是无效的?
var a = List[(String,String)]
a = a :: ("x","y")
基本上,我想初始化一个元组列表,并向列表中添加一个元组。
这里有两个错误。
第一个是你试图实例化一个抽象类的列表
我相信你想做的是以下
var a : List[(String,String)] = List()
这将创建一个空元组列表。
第二个是,您试图添加一个实际上不是元组的元素,所以我认为您应该尝试以下
a = a:+(("x","y"))
在这里,您定义了一个元组,并将其添加到您的列表
您可以通过多种方式实例化空的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
还要注意,Traversable
、Iterable
、Seq
和LinearSeq
的默认实例化也都返回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
并保留预期的顺序(与代码中出现的顺序相同)。
简单的直接声明:
val l=List("type"->"number","min"->"2","step"->"1","value"->"2")
如果你想添加到现有的数组中,你也可以这样写add:
var a : List[(String,String)] = List()
a:+=(("x","y"))