我正在尝试解决一个问题,结果以Map [String,(Double,Double)]格式显示。
我想知道是否有一种方法可以将其转换为Map [String,Double,Double],因为我想按字符串对其进行排序?
更具体地说,我想按以下顺序对其进行排序:
("A1", (7.8,9.2))
("A2", (4.2,44.3))
("A11", (9,54.1))
如果我要使用SortedMap,我会得到类似的东西:
("A1", (7.8,9.2))
("A11", (9,54.1))
("A2", (4.2,44.3))
这不是期望的结果。
P.S:我想以适当的格式转换地图,以便我可以申请:
sortBy((x:String)=>(x.substring(1).toInt))
非常感谢
答案 0 :(得分:0)
据我了解,您想按键对地图进行排序。你可以这样做
val inputMap = Map(
A1->(7.8,9.2),
A11-> (9,54.1),
A2-> (4.2,44.3)
)
val outputMap = inputMap.toSeq.sortBy(_._1.split("A")(1).toInt).toList
println(outputMap) //List((A1,(7.8,9.2)), (A2,(4.2,44.3)), (A11,(9,54.1)))
,前提是密钥始终具有与A + number ex相同的格式。 “ A5”有效,AA1无效。
如果要将答案作为元组(键,值)列表,则可以执行outputMap.toSeq或toList。
答案 1 :(得分:0)
val ex = Map(("A1", (7.8,9.2))
,("A2", (4.2,44.3))
,("A11", (9.0,54.1)))
Without changing the format of the Map, using
ex.toList.sortBy(x=>x._1.substring(1).toInt)
如果您希望通过将{>从Map[String,(Double,Double)]
更改为Map[String,Double,Double]
到{>
ex.map{case (a,(b,c))=>(a,b,c)}.toList.sortBy(x=>x._1.substring(1).toInt)
在Scala REPL中:
scala> ex.toList.sortBy(x=>x._1.substring(1).toInt)
res97: List[(String, (Double, Double))] = List((A1,(7.8,9.2)), (A2,(4.2,44.3)), (A11,(9.0,54.1)))
scala> ex.map{case (a,(b,c))=>(a,b,c)}.toList.sortBy(x=>x._1.substring(1).toInt)
res96: List[(String, Double, Double)] = List((A1,7.8,9.2), (A2,4.2,44.3), (A11,9.0,54.1))