问题:如何根据列表中的其他项进行过滤?
我有一个看起来像那样的列表
List((2,2),(2,1),(3,1),....)
我希望保留那些在获得相同的第一个数字时得到最大第二个数字的tupples
在输出
上有类似的东西List((2,2),(3,1),...)
删除(2,1),因为1是<1。然后2英寸(2,2)
所以我需要根据List中的其他对象进行过滤,如何做到这一点。
效率并不重要,因为列表最多有171个项目
答案 0 :(得分:16)
当给定的“密钥”出现两次时,将对列表转换为映射将使用最后出现的条目。
并且元组在第一个元素上排序,然后在第二个元素上排序等。
所以:
List((2,2),(2,1),(3,1)).sorted.toMap
// = List((2,1),(2,2),(3,1)).toMap
// = Map((2,2), (3,1))
如有必要,只需转换回.toList
的列表
答案 1 :(得分:11)
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