将地图转换为已排序的列表

时间:2013-05-05 20:49:05

标签: list scala map

我有一张地图......

Map(a -> List(a, a), b -> List(b, b), l -> List(l, l))

我可以转换为List

List((a,2), (l,2), (b,2))

只需执行myMap.toList();

即可

但我想转换为排序列表 - 按元组的第一个元素排序?

任何提示?

由于

2 个答案:

答案 0 :(得分:11)

快速解决方案:myMap.toList.sortBy(_._1)

这相当于myMap.toList.sortBy(tuple => tuple._1)_1从元组中获取第一个元素。

sortBy通常采用一个函数将已排序的元素映射到某个值,该值将用于比较正在排序的元素。

你也可以这样写得更详细:myMap.toList.sortBy {case (key, _) => key}

答案 1 :(得分:0)

根据您的使用情况,首先使用有序集合可能是合适的。

TreeMap 是一个SortedMap - 它会在您插入/移除值时对集合进行排序,从而提供对数查找/插入。如果您的排序操作经常发生相对于插入/删除的操作,则可能需要对常量时间操作进行折衷,以便对排序结果进行廉价访问。

ListMap 是基于列表的地图结构。查找/插入非常低效,但如果这些操作相对不频繁发生,这可能是一个合适的选择。每当插入对时,您都必须对列表进行排序。