1

単純な場合はご容赦ください。ただし、scalaで次のことを行う最も効率的な方法は何ですか。

まったく同じ数の要素を持つ2つのコレクション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 に答える