【问题标题】:Yield after if within nested for loop如果在嵌套的 for 循环中后产生
【发布时间】:2017-11-14 21:09:19
【问题描述】:

我在嵌套 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)
               }
             }

我尝试将 yield 放在 for 循环的末尾,如果我用 println 替换 yield 似乎可以工作,但我不确定如何使用 yield。

另外,如果您有更实用的方法来解决这个问题,我们将不胜感激,谢谢!

【问题讨论】:

    标签: scala functional-programming


    【解决方案1】:

    这里推荐的方法根本不是“嵌套”“循环”——而是创建一个使用“守卫”的单一 for-comprehension:

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

    【讨论】:

      猜你喜欢
      • 2020-04-18
      • 1970-01-01
      • 2020-05-11
      • 1970-01-01
      • 2015-12-22
      • 1970-01-01
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多