在Scala中映射到列表[Tuple2] - 删除重复项?

时间:2017-03-31 08:41:09

标签: scala scala-collections

我试图将地图转换为元组列表,给出如下地图

Map("a"->2,"a"->4,"a"->5,"b"->6,"b"->1,"c"->3)

我想输出

List(("a",2),("a",4),("a",5),("b",6),("b",1),("c",3))

我试过了

val seq = inputMap.toList  //output (a,5)(b,1)(c,3)

var list:List[(String,Int)] = Nil 
   for((k,v)<-inputMap){
       (k,v) :: list
   }  //output (a,5)(b,1)(c,3)

为什么删除重复项?我没有看到其他元组有&#34; a&#34;作为关键。

3 个答案:

答案 0 :(得分:1)

这是因为Map不允许重复密钥:

val map = Map("a"->2,"a"->4,"a"->5,"b"->6,"b"->1,"c"->3) 
println(map) // Map(a -> 5, b -> 1, c -> 3)

答案 1 :(得分:0)

问题在于[FilterOne(Order = 1), FilterTwo(Order = 2)] ,其密钥为Map,因此您不能拥有相同密钥的两倍。这是因为Set是字典,用于通过键访问值,因此键必须是唯一的。因此,构建器仅保留使用键Map给出的最后一个值。

顺便说一下,"a"已经有一个方法Map,它完全按照您的方式执行。

答案 2 :(得分:0)

由于map具有重复键,因此在创建地图时它将删除重复的条目。

Map("a"->2,"a"->4,"a"->5,"b"->6,"b"->1,"c"->3)

它会变成,

Map(a -> 5, b -> 1, c -> 3)

所以其他操作将在短地图上执行