Scala列表理解一次采用两个元素

csv*_*van 1 scala list-comprehension list

假设我可以放心,我有一个包含偶数元素的列表,例如

val items = List(1,2,3,4,5,6)
Run Code Online (Sandbox Code Playgroud)

我知道我可以写一个列表理解,一次只取一个元素:

for (item <- items) println(item)
Run Code Online (Sandbox Code Playgroud)

但是,有什么方法可以使用理解来一次处理2个或更多元素吗?

for ((first, second) <- items) println (first + second)
Run Code Online (Sandbox Code Playgroud)

elm*_*elm 11

也考虑使用zip,像这样,

for ( (f,s) <- items zip items.drop(1) ) println (s"f: $f, s: $s")
f: 1, s: 2
f: 2, s: 3
f: 3, s: 4
f: 4, s: 5
f: 5, s: 6
Run Code Online (Sandbox Code Playgroud)

或者每第三个元素,

for ( (f,t) <- items zip items.drop(3) ) println (s"f: $f, t: $t")
f: 1, t: 4
f: 2, t: 5
f: 3, t: 6
Run Code Online (Sandbox Code Playgroud)


Eas*_*sun 8

这里是:

scala> val items = 1 to 6 toList
items: List[Int] = List(1, 2, 3, 4, 5, 6)

scala> for(List(first, second) <- items.grouped(2)) println(s"first: $first, second: $second")
first: 1, second: 2
first: 3, second: 4
first: 5, second: 6
Run Code Online (Sandbox Code Playgroud)

  • 但这效率低下。您正在构建n / 2个列表,只是要分解它们。(构建意味着ListBuffer,而不是:: b :: Nil。)使用zip更好。 (2认同)