diff options
author | Adriaan Moors <adriaan.moors@epfl.ch> | 2009-11-10 16:39:16 +0000 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@epfl.ch> | 2009-11-10 16:39:16 +0000 |
commit | 46af17c33cf105f8e99ca75f0917dd95c81e568c (patch) | |
tree | 2b33b7231cfe500389e454562b11365e677b45bb /src/library/scala/Tuple2.scala | |
parent | e597ad04c072dac7300cec06e9f8bbf4d6d66855 (diff) | |
download | scala-46af17c33cf105f8e99ca75f0917dd95c81e568c.tar.gz scala-46af17c33cf105f8e99ca75f0917dd95c81e568c.tar.bz2 scala-46af17c33cf105f8e99ca75f0917dd95c81e568c.zip |
Zipped for Tuple2&Tuple3
Diffstat (limited to 'src/library/scala/Tuple2.scala')
-rw-r--r-- | src/library/scala/Tuple2.scala | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/library/scala/Tuple2.scala b/src/library/scala/Tuple2.scala index 9835e8505d..8a08552149 100644 --- a/src/library/scala/Tuple2.scala +++ b/src/library/scala/Tuple2.scala @@ -29,12 +29,27 @@ case class Tuple2[+T1, +T2](_1:T1, _2:T2) extends Product2[T1, T2] { /** Swap the elements of the tuple */ def swap: Tuple2[T2,T1] = Tuple2(_2, _1) +// TODO: probably loosen zip and zipped from <:< to <%< + + def zip[Repr1, El1, El2, To](implicit w1: T1 <:< TraversableLike[El1, Repr1], + w2: T2 <:< Iterable[El2], + cbf1: CanBuildFrom[Repr1, (El1, El2), To]): To = { + val coll1: TraversableLike[El1, Repr1] = _1 + val coll2: Iterable[El2] = _2 + val b1 = cbf1(coll1.repr) + val elems2 = coll2.iterator + + for(el1 <- coll1) + if(elems2.hasNext) + b1 += ((el1, elems2.next)) + + b1.result + } + def zipped[Repr1, El1, Repr2, El2](implicit w1: T1 <:< TraversableLike[El1, Repr1], w2: T2 <:< IterableLike[El2, Repr2]): Zipped[Repr1, El1, Repr2, El2] = new Zipped[Repr1, El1, Repr2, El2](_1, _2) class Zipped[+Repr1, +El1, +Repr2, +El2](coll1: TraversableLike[El1, Repr1], coll2: IterableLike[El2, Repr2]) { // coll2: IterableLike for filter - def it: (Repr1, Repr2) = (coll1.repr, coll2.repr) // TODO: do we want this? what should its name be? - def map[B, To](f: (El1, El2) => B)(implicit cbf: CanBuildFrom[Repr1, B, To]): To = { val b = cbf(coll1.repr) val elems2 = coll2.iterator |