【问题标题】:How to sum/combine each value in List of List in scala如何在scala中对列表中的每个值进行求和/组合
【发布时间】:2015-10-24 12:22:53
【问题描述】:

给定以下 Scala 列表:

val l = List(List("a1", "b1", "c1"), List("a2", "b2", "c2"), List("a3", "b3", "c3"))

如何获得:

List("a1a2a3","b1b2b3","c1c2c3")

是否可以在具有两个以上列表的列表上使用 zipped.map(_ + _) ?或者有其他方法可以解决吗?

【问题讨论】:

    标签: list scala collections


    【解决方案1】:

    您可以使用.transpose 方法:

    scala> val l = List(List("a1", "b1", "c1"), List("a2", "b2", "c2"), List("a3", "b3", "c3"))
    l: List[List[String]] = List(List(a1, b1, c1), List(a2, b2, c2), List(a3, b3, c3))
    
    scala> l.transpose
    res0: List[List[String]] = List(List(a1, a2, a3), List(b1, b2, b3), List(c1, c2, c3))
    

    然后映射外部列表,使用mkString 创建每个String

    scala> l.transpose.map(_.mkString)
    res1: List[String] = List(a1a2a3, b1b2b3, c1c2c3)
    

    【讨论】:

      【解决方案2】:

      其他解决方案

      scala> val l = List(List("a1", "b1", "c1"), List("a2", "b2", "c2"), List("a3", "b3", "c3"))
      scala> l.reduce[List[String]]{ case (acc, current) => acc zip current map { case (a, b) => a + b } }
      
      res2: List[String] = List(a1a2a3, b1b2b3, c1c2c3)
      

      【讨论】:

      • 如果列表超过 3 个怎么办?
      • @MateuszDymczyk 改变 foldLeft -> 减少
      猜你喜欢
      • 2021-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 2020-04-04
      相关资源
      最近更新 更多