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

问题描述 投票:10回答:4

为什么这无效?

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

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

scala
4个回答
19
投票

这里您有两个错误。

第一个是您要实例化List的哪个抽象类

我相信您要执行的操作如下

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

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

第二个原因是您试图添加实际上不是元组的元素,所以我认为您应该尝试以下操作

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

这里您正在定义一个元组并将其添加到列表a


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

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


1
投票

如果要添加到现有数组,也可以这样编写添加项:


0
投票

声明中的简单直接方法:

© www.soinside.com 2019 - 2024. All rights reserved.