首页 > 解决方案 > 如何按升序对Scala映射进行排序?

问题描述

我有一张这样的地图:

var map:Map[String, Double] = Map(
 "1" -> 4.6, 
 "2" -> 2.1, 
 "3" -> 3.4, 
 "4" -> 0.3
)

我想按值按升序对其进行排序,以便在打印地图中的每个键值对后得到以下输出:

(4,0.3)
(2,2.1)
(3,3.4)
(1,4.6)

我怎样才能做到这一点?显然 sorted 方法不存在,所以我必须将 Map 转换为另一种数据类型并从那里开始工作。

标签: scalasortingdictionarykey-value

解决方案


只需将 Map 转换为 List 并使用sortByDouble (for Scala 2.13+) 的 orderer 应用,如下所示:

implicit val orderer = Ordering.Double.TotalOrdering

myMap.toList.sortBy(_._2)
// res1: List[(String, Double)] = List((4,0.3), (2,2.1), (3,3.4), (1,4.6))

推荐阅读