【问题标题】:Acting on inner and outer loops for multidimensional array in idiomatic scala作用于惯用scala中多维数组的内循环和外循环
【发布时间】:2018-01-09 11:39:48
【问题描述】:

我有这个嵌套循环:

for ( y <- 0 to 5) {
    for ( x <- 0 to 5) {
        print(x, y)
    }
    println()
}

有没有更简洁的方式在 scala 中表达这一点——请记住,我想为每个外部循环迭代以及内部循环执行一次?

以下是我得到的最接近的:

for {
    y <- 0 to 5
    x <- 0 to 5
} {
    print (x, y) + " "
    if(x == 5) println()
}

【问题讨论】:

    标签: scala loops multidimensional-array controls


    【解决方案1】:
      for {
        y <- 0 to 5
        x <- 0 to 5
        _ = if (x ==5) println()
      } print(x, y)
    

    对我来说似乎是最简洁的方式。

    【讨论】:

    • 这很有趣——它不像原来那样做最终的 println。我不明白这个结构,必须查一下:)
    • 啊,你是用_来扔掉守卫的回报?
    【解决方案2】:

    我认为 for 推导式在这里不是一个好的选择,为什么不直接使用 foreach 呢?像这样:

    (0 to 5).foreach{ y =>
      (0 to 5).foreach{ x =>
        print (x, y) + " "
      }
      println()
    }
    

    【讨论】:

    • 在内循环之后移动 println 意味着它复制了原始行为。您是否有理由解释为什么在这里 for 推导式不是一个好选择?
    • 我根据您的评论编辑了代码。当您想将多个结果编译为一个结果时,通常会使用 for-comprehensions,如果您想处理部分结果,则它并没有真正的帮助。例如,如果您有三个 Options,并且您使用 for 理解将它们合并为一个对象,则无法知道哪个是 None,与尝试相同。
    • 仔细阅读,似乎 for-comprehensions 实际上被翻译成 foreach(或 map、flatmap 等),这意味着 for-comprehenssion 只是语法糖。例如:docs.scala-lang.org/tutorials/FAQ/yield.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多