[英]Scala filtering tuple list
問題:如何根據列表中的其他項進行過濾?
我有一個看起來像這樣的列表
List((2,2),(2,1),(3,1),....)
我想保留那些在獲得相同的第一個數字時獲得最大第二個數字的tupples
在輸出上就是這樣的東西
List((2,2),(3,1),...)
刪除(2,1),因為1(<2,2)<2
所以我需要根據列表中的其他對象進行過濾,如何做到這一點。
效率並不重要,因為該列表最多可獲得171項
將對象列表轉換為映射將在給定“密鑰”出現兩次時使用最后出現的條目。
並且元組在第一個元素上排序,然后在第二個元素上排序等。
所以:
List((2,2),(2,1),(3,1)).sorted.toMap
// = List((2,1),(2,2),(3,1)).toMap
// = Map((2,2), (3,1))
如有必要, .toList
轉換回帶有.toList
的列表
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.