如何在Scala Map中反转键和值

映射是一种将数据存储为键:值对的数据结构。

语法:

    Map(key->value, key->value)

反转映射中的键和值

在这里,我们将看到一个在Scala Map中反转键和值程序。我们将值反转为键,将键反转为对。

因此,在此之前,我们必须确保初始映射的键和值都唯一以避免错误。

程序:

object myObject { 
	def main(args:Array[String]) { 
		val bikes = Map(1->"S1000RR" , 2->"R1", 3->"F4" ) 
        println("Inital map: " + bikes)		
		val reverse = for ((a, b) <- bikes) yield (b, a) 
		println("Reversed map: " + reverse) 
	} 
}

输出结果

Inital map: Map(1 -> S1000RR, 2 -> R1, 3 -> F4)
Reversed map: Map(S1000RR -> 1, R1 -> 2, F4 -> 3)

说明:

在这里,我们声明了一个映射,然后反转了它的值。在反向变量中,我们插入了与原始映射的每一对相反的值,yield方法采用(key,value)对,并将(value,key)对返回到反向映射。

如果值不是唯一的怎么办?

有一点需要考虑的是,两个键值对应该是唯一的。但是,如果我们在值中插入重复项,则在反向映射中将删除该对。

程序:

object myObject { 
	def main(args:Array[String]) { 
		val bikes = Map(1->"S1000RR" , 2->"R1", 3->"F4", 4->"S1000RR" ) 
        println("Inital map: " + bikes)		
		val reverse = for ((a, b) <- bikes) yield (b, a) 
		println("Reversed map: " + reverse) 
	} 
}

输出结果

Inital map: Map(1 -> S1000RR, 2 -> R1, 3 -> F4, 4 -> S1000RR)
Reversed map: Map(S1000RR -> 4, R1 -> 2, F4 -> 3)

因此,代码可以正常运行,但是反向键将删除对4-> S100RR以使反向键的所有键都唯一。