4

我是 scala 的新手,我试图从元组元素列表中删除它们的第一个值大于第二个值。

例如,从列表中:

val list =  List[(Int,Int)]((1,3),(3,1),(2,2)) 

我想获取列表:

val list =  List[(Int,Int)]((1,3),(2,2)) 

所以我使用了以下几行:

var newList = List[(Int, Int)]()
for (element <- list) {
    if (element._1 <= element._2) {
        newList ::= element;
    }
}

但是对scala来说感觉很长..有没有更短的方法?

4

3 回答 3

10

像 twillouer 和 tzofia 的解决方案,但使用模式匹配:

list filter { case (a, b) => a <= b }
于 2013-02-06T16:44:19.983 回答
6

你可以简单地做:

list.filter(element => element._1 <= element._2)

filter 函数过滤掉不满足给定布尔条件的元素。

于 2013-02-06T16:43:13.513 回答
3

你可以像这样使用过滤器:

scala> val list =  List[(Int,Int)]((1,3),(3,1),(2,2)) 
list: List[(Int, Int)] = List((1,3), (3,1), (2,2))

scala>  val newList = list.filter(a => a._1 <= a._2)
newList: List[(Int, Int)] = List((1,3), (2,2))

或 filterNot 例如:

scala> val newList = list.filterNot(a => a._1 > a._2)
newList: List[(Int, Int)] = List((1,3), (2,2))
于 2013-02-06T16:42:38.267 回答