And*_*ndy 1 scala scala-collections
请原谅我,如果它很简单,但在scala中执行以下操作的最有效方法是什么:
假设我有两个集合A和B,其元素数量完全相同.例如,
A = {objectA1, objectA2, .... objectAN}
B = {objectB1, objectB2, .... objectBN}
Run Code Online (Sandbox Code Playgroud)
我想得到{{objectA1, objectB1}, {objectA2, objectB2}, ... {objectAN, objectBN}}.请注意,这些集合可能非常大.
@Tomasz的一些补充回答:如果集合非常大,使用效率很低,a zip b因为它会创建一个完整的中间集合.还有另一种选择:
scala> (a,b).zipped
res15: scala.runtime.Tuple2Zipped[Int,Seq[Int],Char,Seq[Char]] = scala.runtime.Tuple2Zipped@71060c3e
scala> (a,b,b).zipped // works also for Tuple3
res16: scala.runtime.Tuple3Zipped[Int,Seq[Int],Char,Seq[Char],Char,Seq[Char]] = scala.runtime.Tuple3Zipped@30b688e1
Run Code Online (Sandbox Code Playgroud)
在内部,Tuple2Zipped和Tuple3Zipped使用迭代器.这样,当您想要转换拉链时,它会更有效.
拉链他们:
A zip B
Run Code Online (Sandbox Code Playgroud)
例:
scala> val a = Seq(1, 2, 3, 4, 5)
a: Seq[Int] = List(1, 2, 3, 4, 5)
scala> val b = Seq('a', 'b', 'c', 'd', 'e')
b: Seq[Char] = List(a, b, c, d, e)
scala> a zip b
res5: Seq[(Int, Char)] = List((1,a), (2,b), (3,c), (4,d), (5,e))
Run Code Online (Sandbox Code Playgroud)
如果是A和B迭代器,这也将创建一对迭代器.
| 归档时间: |
|
| 查看次数: |
395 次 |
| 最近记录: |