如何在Scala中将List转换为Map?

在Scala中列出

列表是相同类型的不可变数据的集合。List表示Scala中的LinkedList。

创建列表

在Scala中创建列表的语法,

    val list_name = List (element1, elemenet2, ...)

列表示例

    // 整数列表
    List(3, 65, 1, 90, 54, 100)
    // 字符串列表
    List("scala", "C++", "JavaScript", "Python")

Scala映射

Map是以键值对形式存储的元素的集合。它们具有用于检索与键相关的值的唯一键。

在Scala中创建映射

    val map_name = Map(key1 -> value1, key2 -> value2, ....)

映射示例

    Map(int -> string): Map(1 -> "Scala" , 2 -> "JavaScript", 3-> "Python")

在Scala中将列表转换为映射

在Scala中,您可以使用toMap方法将列表转换为Scala中的映射。

映射包含一组值,即key-> value,但列表包含单个值。因此,在将列表转换为映射时,我们有两种方法:

  1. 将索引添加到列表。

  2. 合并两个列表,一个用作键,另一个用作值。

通过向列表添加索引将列表转换为映射

我们将添加索引作为列表元素的键值。为此,我们将使用zipWithIndex方法。

语法:

    List_name .zipWithIndex.map{ case(v,i) => (i,)}.toMap

程序将列表转换为映射

object MyObject {
    
    def main(args: Array[String]) {
        val progLang = List("C++", "JavaScript" , "Scala" , "Python")
        val map = progLang.zipWithIndex.map{ case (v,i) => (i,v) }.toMap
        println("map的值: "+ map)
    }
}

输出:

map的值: Map(0 -> C++, 1 -> JavaScript, 2 -> Scala, 3 -> Python)

说明:

在上面的代码中,我们创建了一个列表progLang,其中包含编程语言的名称。为了将此列表转换为映射,我们使用了toMap方法。由于列表具有单个值,并且映射需要值,因此我们使用zipWithIndex方法将索引用作键,该方法将索引值从0开始添加到映射中列表的每个元素。使用这些功能,我们创建了带有名称映射的Map,并使用println方法打印了其内容。

通过合并两个列表将列表转换为映射

我们可以通过使用两个列表并将其合并以创建映射来创建映射。为了进行创建,我们将使用列表之一作为键,另一些作为值添加到映射的键值对。

用作映射中键的列表应具有唯一元素,并且两个列表应具有相同数量的元素。

语法:

    map_name = (list1_name zip list2_name).toMap

程序将列表转换为映射

object MyObject {
    
    def main(args: Array[String]) {
        val myBikes = List("ThunderBird 350" , "YRF R3" , "S1000RR")
        val topSpeed = List(132 , 167 , 300)
        val bikeSpeed = (myBikes zip topSpeed).toMap
        println("map的值: "+ bikeSpeed)
    }
}

输出:

map的值: Map(ThunderBird 350 -> 132, YRF R3 -> 167, S1000RR -> 300)

说明:

在上面的代码中,我们创建了两个列表,myBike用于存储自行车的名称,以及topSpeed用于存储这些自行车的最高速度。现在,我们已使用toMap方法将列表转换为映射。要将一个列表用作键,将另一个列表用作值,我们使用了zip。然后,我们将映射存储到bikeSpeed变量中,并使用println打印其内容。

要记住的要点:

  • 虽然转换两个列表的元素时应相同,否则将保留列表中多余的元素(将不考虑)。

  • 如果要用作键的列表元素不是唯一的,则后一个元素将在映射中考虑,并且第一个元素的匹配值将被丢弃。