【问题标题】:Is there a way to make a for loop with two parallel iterators in Scala?有没有办法在 Scala 中使用两个并行迭代器创建一个 for 循环?
【发布时间】:2020-02-26 22:00:20
【问题描述】:

我正在尝试在 Scala 中对 HashMap 执行 for 循环,但我还需要计算我的迭代次数,例如各种索引。这是我想要的功能:

    val map = HashMap()
    val i = 0;

    for ((k, v) <- map) {
        // do something
        i += 1
    }

但我希望它看起来像这样,在 for 循环语法中更新 i。但是,这似乎是一个嵌套循环,而不是一个并行迭代器。

    for ((k, v) <- map; i <- 0 until map.size) {
        // do something
    }

【问题讨论】:

  • 你可以for (((k, v), i) &lt;- map.zipWithIndex) {
  • 我认为值得将此作为答案。 ;)
  • 我会避免在 Scala 中使用 for 循环。它们不是很实用,Scala 为大多数集合提供了mapflatMapforeach 方法,因此您不需要编写for 循环的样板。编写 collection.foreach(println) 比执行相同操作的 for 循环要容易得多。
  • @csjacobs24Scala 没有 for 循环!尽管 for 理解表面上看起来很相似,但它们都变成了 mapflatMapfilter

标签: scala for-loop foreach syntax iteration


【解决方案1】:

zipWithIndex 方法专为此目的而设计:

for {((k, v), i) <- map.zipWithIndex} yield {???}

map.zipWithIndex.collect { case ((k, v), i) => ??? }

我个人会在这种情况下使用第二个版本,并且只在迭代多个集合时使用for 语法。

【讨论】:

    猜你喜欢
    • 2019-06-17
    • 2021-04-09
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 2021-11-15
    • 1970-01-01
    相关资源
    最近更新 更多