using System.Collections.Generic;
public static void Main()
var conflicts = new List<Tuple<string, string>>();
conflicts.Add(new Tuple<string, string>("Maths", "English"));
conflicts.Add(new Tuple<string, string>("Science", "French"));
conflicts.Add(new Tuple<string, string>("French", "Science"));
conflicts.Add(new Tuple<string, string>("English", "Maths"));
foreach(var i in conflicts) Console.WriteLine(i.Item1 + " " + i.Item2);
public static void RemoveDupes(List<Tuple<string, string>> collection){
var duplicates = collection
.Select((x, i) => new{ Item= new Tuple<string,string>(x.Item2.IsGreaterThan(x.Item1) ? x.Item2 : x.Item1,
x.Item2.IsGreaterThan(x.Item1) ? x.Item1 : x.Item2), Index = i})
.Where(x => x.Count() > 1)
.Select(x => new {Items = x, Count=x.Count()})
.Zip(Enumerable.Range( 1, x.Count ),
( j, i ) => new { Item = j, RowNumber = i }
).Where(x => x.RowNumber != 1);
foreach(var item in duplicates){
collection.RemoveAt(item.Item.Index);
public static bool IsGreaterThan(this string val, string compare){
return val.CompareTo(compare) == 1;