Есть ли способ сделать для l oop с двумя параллельными итераторами в Scala? - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь сделать для l oop на HashMap в Scala, но мне также нужен счетчик моей итерации, такой как индекс сортов. Вот что я хочу, чтобы эта функциональность была:

    val map = HashMap()
    val i = 0;

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

Но я хочу, чтобы она выглядела примерно так, где я обновляюсь в синтаксисе l oop. Но, похоже, он действует как вложенный l oop, а не как параллельный итератор.

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

1 Ответ

4 голосов
/ 27 февраля 2020

Метод zipWithIndex разработан специально для этой цели:

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

или

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

Лично я бы использовал в этом случае вторую версию и использовал бы только for синтаксис при итерации по нескольким коллекциям.

...