Scala过滤元组列表

时间:2010-12-19 21:09:16

标签: list scala filter tuples

问题:如何根据列表中的其他项进行过滤?

我有一个看起来像那样的列表

List((2,2),(2,1),(3,1),....)

我希望保留那些在获得相同的第一个数字时得到最大第二个数字的tupples

在输出

上有类似的东西
List((2,2),(3,1),...)

删除(2,1),因为1是<1。然后2英寸(2,2)

所以我需要根据List中的其他对象进行过滤,如何做到这一点。

效率并不重要,因为列表最多有171个项目

2 个答案:

答案 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