如何在scala中组合两个元组?

时间:2014-10-07 05:37:24

标签: scala

我想组合两个元组,例如

我的元组是:

(a,b)
(a,c)
(d,a)
(d,c)

我希望组合为,

(a,b,c)                // Ist & IInd tuple
(a,b,d)                // Ist & IIIrd tuple
(a,b,d,c)              // Ist & IVth tuple
(a,c,d)                // IInd & IIIrd tuple  ( IInd & IVth is also same)

这里我最初将第一个元组与第二个元组,第三个元组和最后一个元组组合在一起。然后我拿第二个元组并将它与第三元组和第四元组结合起来。最后我采用第三元组并将其与剩余的最后一元组合。记住如果我们组合两个元组,如果出现相同的组合值,则删除重复的元组

2 个答案:

答案 0 :(得分:4)

如果你想要它们作为输出,那么元组是非常困难的。如果set会这样做:

scala> List(('a,'b), ('a,'c), ('d,'a), ('d,'c)).combinations(2).map(
                                y => y.flatten(_.productIterator).toSet).toSet

res42: scala.collection.immutable.Set[scala.collection.immutable.Set[Any]] = 
 Set(Set('a, 'b, 'c), Set('a, 'b, 'd), Set('a, 'b, 'd, 'c), Set('a, 'c, 'd))

答案 1 :(得分:1)

这样的东西可能会起作用

val tuples = List(('a','b'),('a','c'),('d','a'),('d','c'))

def combine (tuples: List[(Char,Char)]) = {
val combinations = for {
    t1<- tuples
    t2<- tuples
    if (t1!=t2)
} yield {
    Set(t1._1,t1._2,t2._1,t2._2).toList.sorted
combinations.toSet }