問:如何基於列表中的其他項目進行過濾?Scala過濾元組列表
我有一個列表,看起來像
List((2,2),(2,1),(3,1),....)
我想保持它得到了最大的第二個數字時,他們得到了相同的第一批
的tupples這樣類似的東西輸出
List((2,2),(3,1),...)
與(2,1)中移除,因爲在1(2,2)
是<然後所以我需要根據列表中的其他對象進行過濾如何做到這一點。
效率是不是真的很重要,因爲該名單得到了最大171項
問:如何基於列表中的其他項目進行過濾?Scala過濾元組列表
我有一個列表,看起來像
List((2,2),(2,1),(3,1),....)
我想保持它得到了最大的第二個數字時,他們得到了相同的第一批
的tupples這樣類似的東西輸出
List((2,2),(3,1),...)
與(2,1)中移除,因爲在1(2,2)
是<然後所以我需要根據列表中的其他對象進行過濾如何做到這一點。
效率是不是真的很重要,因爲該名單得到了最大171項
for ((x, y) <- lst if !lst.exists(t => x == t._1 && y < t._2)) yield (x, y)
但是如果你想非二次複雜:
lst.groupBy(_._1).map(_._2.max).toList.sorted
轉換對列表的地圖當給定的「鑰匙」出現兩次時將使用最後出現的入口。
而一個元組排序的第一個元素,那麼第二個元素等
等等:
List((2,2),(2,1),(3,1)).sorted.toMap
// = List((2,1),(2,2),(3,1)).toMap
// = Map((2,2), (3,1))
只是轉換回列表與.toList
之後,如果需要的話
感謝,不知道關於groupby – pastjean 2010-12-19 21:56:05
你是否確信第二個例子? groupBy將返回一個Map [Int,(Int,Int)] – 2010-12-19 22:43:08
有一天,我會停止被驚訝的人寧願採取一個瘋狂的猜測,而不是將一行粘貼到repl。 – extempore 2010-12-20 06:24:30