使用"下一个"和"上一个"值映射的Scala列表

ypr*_*rol 1 performance functional-programming scala

什么是最好的转变方式:

val arr: List[String]
Run Code Online (Sandbox Code Playgroud)

至:

val mapArr: List[Tuple[Int, String]] 
Run Code Online (Sandbox Code Playgroud)

哪里:

each Tuple is:
  - String value is the an odd index element of the list
  - Int the size of the previous value. 
Run Code Online (Sandbox Code Playgroud)

例:

val stringArr = List("a", "aaa", "bb", "abc")
val resultShouldBe = List((1, "aaa"), (2, "abc"))  
Run Code Online (Sandbox Code Playgroud)

Yuv*_*kov 5

你可以用IterableLike.grouped它:

val result = stringArr
               .grouped(2)
               .collect { case List(toIndex, value) => (toIndex.length, value) }
               .toList
Run Code Online (Sandbox Code Playgroud)

产量:

scala> val stringArr = List("a", "aaa", "bb", "abc")
stringArr: List[String] = List(a, aaa, bb, abc)

scala> stringArr.grouped(2).collect { case List(toIndex, value) => (toIndex.length, value) }.toList
res1: List[(Int, String)] = List((1,aaa), (2,abc))
Run Code Online (Sandbox Code Playgroud)