I have a list of tuples, for example:
(0,2)
(0,5)
(2,0)
(2,5)
(3,4)
(4,3)
(5,0)
(5,2)
There are some tuples where (x, y)
Using foldLeft
var ts = List((0,2), (0,5), (2,0), (2,5), (3,4), (4,3), (5,0), (5,2))
ts.foldLeft(List[(Int,Int)]())
{(acc, el) => if ((acc contains el) || (acc contains el.swap)) acc else el::acc}
// List[(Int, Int)] = List((3,4), (2,5), (0,5), (0,2))
Or, with Sets for an O(n) version (assuming Set lookup and additions are O(1))
ts.foldLeft(Set[(Int,Int)]()){(acc, el) => if (acc(el.swap)) acc else acc + el}
If it doesn't matter if we re-order ones where the swapped tuple is not present (I'm guessing it doesn't as you don't specify which of the ones that have a swapped tuple should be kept):
ts.map{t => if (t._1 < t._2) t else t.swap}.distinct
// List[(Int, Int)] = List((0,2), (0,5), (2,5), (3,4))