我有List[(Int,Int)]
对于前。
val a= List((1,2), (3,4), (1,3), (4,2), (5,4), (3,8))
我想执行这样的操作:
使用以下条件获取第一个元素和groupby:
或
然后跳过包含的元组和剩余的元组执行相同的过程。 可能的答案:
val ans= Map((1,2)->List((1,2),(1,3),(4,2)), (3,4)->List(3,4),(5,4),(3,8))
我该怎么做?
答案 0 :(得分:1)
这似乎有效
a.foldLeft(List[((Int, Int), List[(Int, Int)])]())
{(acc, t) => if (acc.exists (_._2.contains(t)))
acc
else
(t, a.filter(u => u != t && (u._1 == t._1 || u._2 == t._2)))::acc
}.toMap
//> res0: scala.collection.immutable.Map[(Int, Int),List[(Int, Int)]] =
// Map((3,4) -> List((5,4), (3,8)),
(1,2) -> List((1,3), (4,2)))
浏览列表。如果这个元组已经在我们的累加器中,则什么也不做。否则,过滤所有不是当前元组的元组的列表,并与当前元组共享第一个或第二个元素。