Scala过滤元组列表
问题描述:
问:如何基于列表中的其他项目进行过滤?Scala过滤元组列表
我有一个列表,看起来像
List((2,2),(2,1),(3,1),....)
我想保持它得到了最大的第二个数字时,他们得到了相同的第一批
的tupples这样类似的东西输出
List((2,2),(3,1),...)
与(2,1)中移除,因为在1(2,2)
是<然后所以我需要根据列表中的其他对象进行过滤如何做到这一点。
效率是不是真的很重要,因为该名单得到了最大171项
答
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
答
转换对列表的地图当给定的“钥匙”出现两次时将使用最后出现的入口。
而一个元组排序的第一个元素,那么第二个元素等
等等:
List((2,2),(2,1),(3,1)).sorted.toMap
// = List((2,1),(2,2),(3,1)).toMap
// = Map((2,2), (3,1))
只是转换回列表与.toList
之后,如果需要的话
感谢,不知道关于groupby – pastjean 2010-12-19 21:56:05
你是否确信第二个例子? groupBy将返回一个Map [Int,(Int,Int)] – 2010-12-19 22:43:08
有一天,我会停止被惊讶的人宁愿采取一个疯狂的猜测,而不是将一行粘贴到repl。 – extempore 2010-12-20 06:24:30