从Scala中的内部循环返回值,是否改用函数?

从Scala中的内部循环返回值,是否改用函数?,scala,Scala,我试图从内部循环返回一个值。我可以创建一个外部列表 并按照下面注释中的建议将其填充到内部循环中,但这样做了 感觉不是很实用。是否有一个函数可以用来实现这一点 循环/内部循环的类型当前为Unit,但我希望它的类型为List[Int]或类似的集合类型 val data = List(Seq(1, 2, 3, 4), Seq(1, 2, 3, 4)) //val list : List for(d <- data){ for(d1 <- data){ //

我试图从内部循环返回一个值。我可以创建一个外部列表 并按照下面注释中的建议将其填充到内部循环中,但这样做了 感觉不是很实用。是否有一个函数可以用来实现这一点

循环/内部循环的类型当前为Unit,但我希望它的类型为
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
  }
val数据=列表(序号(1,2,3,4),序号(1,2,3,4))
//val列表:列表
用于(d)
上述脱胶相当于:

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

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

使用yield。另外,你可以在一个for语句中使用两个生成器。
List(20, 20, 20, 20)
data.flatMap { x => data.map { y => distance(x, y) } }