3

我有地图...

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

我可以转换为列表

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

通过简单地做myMap.toList();

但我想转换为一个排序列表——它对元组的第一个元素进行排序?

有小费吗?

谢谢

4

2 回答 2

11

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

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

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

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

于 2013-05-05T20:53:46.430 回答
0

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

TreeMap是一个SortedMap——它在您插入/删除值时保持集合排序,提供对数查找/插入。如果您的排序操作相对于插入/删除频繁发生,则可能值得权衡恒定时间操作以廉价访问排序结果。

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

于 2013-05-06T22:17:48.547 回答