Scala过滤元组列表

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)

  • 总有一天,我会不再感到惊讶,人们宁可采取狂野的猜测而不是将一条线粘贴到repl中. (3认同)
  • 对你的地图毫不留情.:d (2认同)