1

如果它很简单,请原谅我,但在 scala 中执行以下操作的最有效方法是什么:

假设我有两个具有完全相同数量的元素的集合 A 和 B。例如,

A = {objectA1, objectA2, .... objectAN} 
B = {objectB1, objectB2, .... objectBN}

我想得到{{objectA1, objectB1}, {objectA2, objectB2}, ... {objectAN, objectBN}}。请注意,这些集合可能非常大。

4

2 回答 2

9

@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

在内部,Tuple2ZippedTuple3Zipped使用迭代器。当您想要转换拉链时,这会提高效率。

于 2012-06-18T08:14:45.057 回答
7

压缩它们:

A zip B

例子:

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))

如果AB是迭代器,这也将创建一个对的迭代器。

于 2012-06-18T07:02:21.100 回答