pas*_*ean 4 scala tuples list filter
问题:如何根据列表中的其他项进行过滤?
我有一个看起来像这样的列表
List((2,2),(2,1),(3,1),....)
Run Code Online (Sandbox Code Playgroud)
我想保留那些在获得相同的第一个数字时获得最大第二个数字的tupples
在输出上就是这样的东西
List((2,2),(3,1),...)
Run Code Online (Sandbox Code Playgroud)
删除(2,1),因为1(<2,2)<2
所以我需要根据列表中的其他对象进行过滤,如何做到这一点.
效率并不重要,因为该列表最多可获得171项
Kev*_*ght 16
将对象列表转换为映射将在给定"密钥"出现两次时使用最后出现的条目.
并且元组在第一个元素上排序,然后在第二个元素上排序等.
所以:
List((2,2),(2,1),(3,1)).sorted.toMap
// = List((2,1),(2,2),(3,1)).toMap
// = Map((2,2), (3,1))
Run Code Online (Sandbox Code Playgroud)
.toList如有必要,请稍后转换回列表
axe*_*l22 11
for ((x, y) <- lst if !lst.exists(t => x == t._1 && y < t._2)) yield (x, y)
Run Code Online (Sandbox Code Playgroud)
但是如果你想要非二次复杂性:
lst.groupBy(_._1).map(_._2.max).toList.sorted
Run Code Online (Sandbox Code Playgroud)