我有一張地圖......轉換映射到一個排序列表
Map(a -> List(a, a), b -> List(b, b), l -> List(l, l))
我可以轉換到一個列表
List((a,2), (l,2), (b,2))
通過簡單地做myMap.toList();
但我想轉換爲排序列表 - 哪些排序在元組的第一個元素?
任何提示?
感謝
我有一張地圖......轉換映射到一個排序列表
Map(a -> List(a, a), b -> List(b, b), l -> List(l, l))
我可以轉換到一個列表
List((a,2), (l,2), (b,2))
通過簡單地做myMap.toList();
但我想轉換爲排序列表 - 哪些排序在元組的第一個元素?
任何提示?
感謝
快速的解決方案:myMap.toList.sortBy(_._1)
。
這相當於myMap.toList.sortBy(tuple => tuple._1)
。 _1
從元組中獲取第一個元素。
sortBy
通常需要一個將已排序元素映射到某個值的函數,該值將用於比較正在排序的元素。
你也可以寫這更冗長這樣的:myMap.toList.sortBy {case (key, _) => key}
當你轉換爲列表然後再遍歷列表中的每個元素時,你的效率如何? – 2013-05-05 20:56:27
你能解釋一下__ 1的含義嗎?是否每個元素都通過元組中的第一個元素進行比較? – 2013-05-05 20:58:56
@MoreThanFive如果你想使用'List'這是不可變的,那麼我不明白這是如何更有效(複雜度和複製量)。 – ghik 2013-05-05 20:59:13
根據您的使用情況下,也可適當首先使用的有序集合。
A TreeMap是一個SortedMap - 當您插入/移除值時,它會保持集合的排序,提供對數查找/插入。如果您的排序操作相對於插入/移除頻繁發生,那麼可能需要對固定時間操作進行折扣以便便宜地訪問排序結果。
A 列表地圖是一個基於列表的地圖結構。查找/插入的效率非常低,但如果這些操作發生的頻率較低,這可能是一個合適的選擇。只要插入對,就必須對列表進行排序。
您不能先將地圖轉換爲有序地圖嗎? – 2013-05-05 20:58:48