我是Scala编程的新手,正在寻找一种方法来从地图中检索另一张地图中过滤的一组键值的列表。从地图中检索过滤后的一组键值
EX- 滤波器= [K1,K2,K3] 的InputMap = [K1-> 1,K1-> 2,k2-> 6,k2-> 7,k2-> 9,k3-> 5, k10-> 66,k4-> 45]
outputMap = [K1 - >(1,2),K2 - >(6,7,9),K3 - >(5)]
感谢提前! -Nancy
我是Scala编程的新手,正在寻找一种方法来从地图中检索另一张地图中过滤的一组键值的列表。从地图中检索过滤后的一组键值
EX- 滤波器= [K1,K2,K3] 的InputMap = [K1-> 1,K1-> 2,k2-> 6,k2-> 7,k2-> 9,k3-> 5, k10-> 66,k4-> 45]
outputMap = [K1 - >(1,2),K2 - >(6,7,9),K3 - >(5)]
感谢提前! -Nancy
您的'inputMap'示例看起来更像是键值对列表,因为map不能包含重复键。 所以:
val list = List("k1"->1, "k1"->2, "k2"->6, "k2"->7, "k2"->9, "k3"->5, "k10"->66, "k4"->45)
val f = Set("k1", "k2", "k3") //filter
首先过滤器只需要按键:
scala>val filtered = list.filter {case (k,v)=>f(k)}
filtered: List[(String, Int)] = List((k1,1), (k1,2), (k2,6), (k2,7), (k2,9), (k3,5))
下一个分组的关键:
scala>val grouped = filtered.groupBy(_._1)
grouped: scala.collection.immutable.Map[String,List[(String, Int)]] = Map(k2 -> List((k2,6), (k2,7), (k2,9)), k1 -> List((k1,1), (k1,2)), k3 -> List((k3,5)))
现在转换成所需的格式:
val outputMap = grouped.map {case (k,v)=>k->v.map{case (ki,vi) => vi}}
outputMap: scala.collection.immutable.Map[String,List[Int]] = Map(k2 -> List(6, 7, 9), k1 -> List(1, 2), k3 -> List(5))
如果我有正确理解你的问题,关键s在地图中是独一无二的 - 这意味着你不会在地图中多次使用同一个键 - 你确定这是你想要的吗? – Hamish
也许你想让你的inputMap看起来像这样? 'Map(“k1” - >(1,2),“k2” - >(6,7,9),“k3” - > 5,“k10” - > 66,“k4” - > 45)' – Hamish