我试图从内循环中返回一个值。我可以创建一个外部列表 并按照下面的评论中的建议将其填充到内部循环中,但这样做 感觉不是很实用。我可以用它来实现这个功能吗?
循环/内部循环的类型当前是单位但我希望它是类型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
}
答案 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
被使用。