如何迭代列表来创建Map?

Ant*_*ony 2 scala

我有两个函数迭代列表并从中制作一个映射.

  def indexedShade: Map[String, Color] =
    myTextFile.map(c => (c.toShade, c)).toMap
  def indexedQuantity: Map[String, Color] =
    myTextFile.map(c => (c.toQuantity, c)).toMap
Run Code Online (Sandbox Code Playgroud)

由于我myTextFile多次迭代,我想迭代一次并创建所需的两个映射.如何创建一个只迭代一次并返回两个 的函数Map[String, Color]

Yev*_*iuk 6

如果你真的只需要迭代一次并map在飞行中构建,你可以用foldLeft:

val (indexedShade, indexedQuantity) = myTextFile
  .foldLeft((Map.empty[String, Color], Map.empty[String, Color]))((acc, cur) => 
    (acc._1 + (cur.toShade -> cur), acc._2 + (cur.toQuantity -> cur)))
Run Code Online (Sandbox Code Playgroud)