如果在嵌套for循环内,则产生

时间:2017-11-14 21:09:20

标签: scala functional-programming

我遇到嵌套for循环和正确使用yield的问题。

问题是我有两个表单List [(Int,Int)]

的列表
val ls = (1,5)::(3,2)::(5,3)::Nil
val ls_two = (1,9)::(5,9)::(6,7)::Nil

现在我想创建第三个列表,只将组合键和所有列表的第二个int组合在一起,结果将是

val result = (1,5,9)::(5,3,9)::Nil

我尝试了一些像这样似乎无法正常工作的变体

val result = for(i <- ls) {
               for(j <- ls_two) {
                 if(i._1 == j._1) yield (i._1,i._2,j._2)
               }
             }

我已尝试将收益率放在for循环的末尾,如果我用println替换收益率似乎有效,但我不确定如何用收益率来做。

此外,如果你有一个更实用的方法来解决这个问题,非常感谢,谢谢!

1 个答案:

答案 0 :(得分:5)

这里推荐的方法不是“嵌套”“循环” - 而是创建一个使用“后卫”的单一理解:

val result = for {
  i <- ls
  j <- ls_two if i._1 == j._1
} yield (i._1,i._2,j._2)