我有一张地图......
Map(a -> List(a, a), b -> List(b, b), l -> List(l, l))
我可以转换为List
List((a,2), (l,2), (b,2))
只需执行myMap.toList();
但我想转换为排序列表 - 按元组的第一个元素排序?
任何提示?
由于
答案 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 是基于列表的地图结构。查找/插入非常低效,但如果这些操作相对不频繁发生,这可能是一个合适的选择。每当插入对时,您都必须对列表进行排序。