Ale*_*rev 8 functional-programming scala
我想在列表中压缩偶数和奇数元素以生成对的列表,如下所示:
["A", "B", "C", "D", "E", "F"] -> [("A", "B"), ("C", "D"), ("E", "F")]
Run Code Online (Sandbox Code Playgroud)
在功能优雅的方式中,最简洁的表达方式是什么?
在2.8中,你可能会使用方法:
scala> val a = "ABCDEF".toList.map(_.toString)
a: List[java.lang.String] = List(A, B, C, D, E, F)
scala> a.grouped(2).partialMap{ case List(a,b) => (a,b) }.toList
res0: List[(java.lang.String, java.lang.String)] = List((A,B), (C,D), (E,F))
Run Code Online (Sandbox Code Playgroud)
(这是2.8.0 Beta1;最新的主干collect代替了partialMap.)
在2.7中 - 而不是2.8中的亚军 - 你可以像legoscia那样创建一个递归方法:
def zipPairs[A](la : List[A]): List[(A,A)] = la match {
case a :: b :: rest => (a,b) :: zipPairs(rest)
case _ => Nil
}
scala> zipPairs(a)
res1: List[(java.lang.String, java.lang.String)] = List((A,B), (C,D), (E,F))
Run Code Online (Sandbox Code Playgroud)
编辑:这是另一个适用于2.7的简洁方法:
scala> (a zip a.drop(1)).zipWithIndex.filter(_._2 % 2 == 0).map(_._1)
res2: List[(java.lang.String, java.lang.String)] = List((A,B), (C,D), (E,F))
Run Code Online (Sandbox Code Playgroud)
(注意使用drop(1)而不是tail它适用于空列表.)
| 归档时间: |
|
| 查看次数: |
4203 次 |
| 最近记录: |