功能相当于比较两个列表

时间:2014-11-05 17:42:25

标签: scala

下面的代码比较了两个列表,如果另一个列表中包含一个元素,则输出该元素:

  var containList = new scala.collection.mutable.ListBuffer[String]()
                                                  //> containList  : scala.collection.mutable.ListBuffer[String] = ListBuffer()
  val lines2 = List("2", "3", "4")                //> lines2  : List[String] = List(2, 3, 4)
  for (l <- lines2) {
    isStringInFile(l)
  }

  def isStringInFile(str: String) = {
    val lines = List("115", "t2t", "3")
    for (l2 <- lines) {
      if (l2.contains(str)) {
        containList += l2
      }
    }
  }                                               //> isStringInFile: (str: String)Unit

  for (c <- containList) {
    println(c)                                    //> t2t
                                                  //| 3
  }

这是一个必不可少的解决方案。但是有功能实现吗?

2 个答案:

答案 0 :(得分:1)

有多种方法可以做到这一点

scala>   val lines2 = List("2", "3", "4")
lines2: List[String] = List(2, 3, 4)

scala> val lines = List("115", "t2t", "3")
lines: List[String] = List(115, t2t, 3)

scala> lines2.filter(lines.contains(_))
res1: List[String] = List(3)

另一种方法

scala> lines.intersect(lines2)
res2: List[String] = List(3)

答案 1 :(得分:1)

我喜欢 @mohit 的解决方案,但您的预期结果与他的预期结果不同。所以这段代码就是你的例子:

val lines2 = List("2", "3", "4")
val lines = List("115", "t2t", "3")

val result = for {l <- lines
     l2 <- lines2
     if l.contains(l2)
} yield l

result.foreach(println)

输出:

t2t
3