SCALAでの理解のために自動インクリメントインデックスを使用する方法

StackOverflow https://stackoverflow.com/questions/9342682

  •  27-10-2019
  •  | 
  •  

質問

SCALAでの包括的な自動侵入カウンターを使用することは可能ですか?

何かのようなもの

for (element <- elements; val counter = counter+1) yield NewElement(element, counter)
役に立ちましたか?

解決

私はあなたが探していると信じています zipWithIndex で使用可能な方法 リスト その他のコレクション。使用の小さな例は次のとおりです。

scala> val list = List("a", "b", "c")
list: List[java.lang.String] = List(a, b, c)

scala> list.zipWithIndex
res0: List[(java.lang.String, Int)] = List((a,0), (b,1), (c,2))

scala> list.zipWithIndex.map{case (elem, idx) => elem + " with index " + idx}
res1: List[java.lang.String] = List(a with index 0, b with index 1, c with index 2)

scala> for ((elem, idx) <- list.zipWithIndex) yield elem + " with index " + idx
res2: List[java.lang.String] = List(a with index 0, b with index 1, c with index 2)

他のヒント

Aは、前の用語ごとに用語が評価されるという点で、ループの場合とは異なります。例として、以下の結果を見てください。私はそれがあなたが探しているものだとは思わない:

    scala> val elements = List("a", "b", "c", "d")
elements: List[java.lang.String] = List(a, b, c, d)

scala> for (e <- elements; i <- 0 until elements.length) yield (e, i)
res2: List[(java.lang.String, Int)] = List((a,0), (a,1), (a,2), (a,3), (b,0), (b,1), (b,2), (b,3), (c,0), (c,1), (c,2), (c,3), (d,0), (d,1), (d,2), (d,3))

Tenshiの答えは、おそらくあなたの望ましい結果で順調に進んでいますが、この反論が役立つことを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top