从Scala中的内循环返回值,使用函数代替?

时间:2014-04-27 21:46:32

标签: scala

我试图从内循环中返回一个值。我可以创建一个外部列表 并按照下面的评论中的建议将其填充到内部循环中,但这样做 感觉不是很实用。我可以用它来实现这个功能吗?

循环/内部循环的类型当前是单位但我希望它是类型List[Int]或类似的集合类型。

 val data = List(Seq(1, 2, 3, 4), Seq(1, 2, 3, 4))

//val list : List   
  for(d <- data){
    for(d1 <- data){
      //add the result to the val list defined above
      distance(d , d1)
    }
  }

  def distance(s1 : Seq[Int], s2 : Seq[Int]) = {
    s1.zip(s2).map(t => t._1 + t._2).sum
  }

1 个答案:

答案 0 :(得分:2)

val list = for (x <- data; y <- data) yield distance(x, y)

会做你想做的事,产生:

List(20, 20, 20, 20)

上述desugared相当于:

data.flatMap { x => data.map { y => distance(x, y) } }

诀窍是不嵌套for - 理解,因为这样你只能得到嵌套的集合;要从概念嵌套迭代中获取平面集合,您需要确保flatMap被使用。