import scala.collection.Set
class
Crossable[E1](es1: Traversable[E1])
{
def
×[E2](es2: Traversable[E2]): Traversable[(E1, E2)] =
for (e1 <- es1; e2 <- es2) yield (e1, e2)
def
cross[E2](es2: Traversable[E2]): Traversable[(E1, E2)] =
for (e1 <- es1; e2 <- es2) yield (e1, e2)
}
object
Crossable
{
implicit
def
trav2Crossable[E1](es1: Traversable[E1]): Crossable[E1] =
new Crossable[E1](es1)
}
object
CrossableTest
{
def
main(args: Array[String]): Unit = {
import Crossable.trav2Crossable
val es1 = Set(1, 2, 3)
val es2 = List("a", "b", "c")
(es1 × es2) foreach(printf(" %s%n", _))
}
}
% scala -cp . CrossableTest
(1,c)
(2,b)
(3,a)
(2,a)
(1,a)
(3,b)
(3,c)
(1,b)
(2,c)
Nguồn
2010-04-27 23:52:28
Tôi thích điều đó nhưng đã hy vọng có một cái gì đó được xây dựng vào thư viện chuẩn. Ngoài ra, đầu ra là một thứ tự thú vị ?! – adam77
es1 là một Set, do đó kết quả có thể là một Set, điều này làm cho thứ tự nhiều hơn hoặc ít ngẫu nhiên hơn (tất nhiên nó không phải ngẫu nhiên, nhưng hoàn toàn là xác định, nhưng tùy thuộc vào các biến chúng ta không biết) –