代码之家  ›  专栏  ›  技术社区  ›  Anthony

如何迭代列表以创建映射?

  •  2
  • Anthony  · 技术社区  · 7 年前

      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]

    2 回复  |  直到 7 年前
        1
  •  6
  •   Yevhenii Popadiuk    7 年前

    如果您真的只需要迭代一次并构建 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)))
    
        2
  •  4
  •   Arnon Rotem-Gal-Oz    7 年前

    val (map1,map2) = myTextFile.
              foldLeft((Map[String,Color](),Map[String,Color]()))
                {case ((m1,m2),c)=>(m1 +(c.toShade->c), m2+(c.toQuantity->c))}
    
    推荐文章