首页 > 解决方案 > 如何迭代列表以创建到 Map?

问题描述

我有两个函数可以迭代列表并从中制作地图。

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

由于我要迭代myTextFile多次,我想只迭代一次并创建所需的两个地图。如何创建一个只迭代一次并返回两个 Map[String, Color]的函数?

标签: scala

解决方案


如果你真的只需要迭代一次并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)))

推荐阅读