日期:2014-05-18 浏览次数:21319 次
using System;
using System.Collections.Generic;
using System.Linq;
class Line
{
public int id { get; set; }
public string n1 { get; set; }
public string n2 { get; set; }
public string n3 { get; set; }
}
class Tools:IEqualityComparer<Line>
{
private string MakeSort(ref Line x)
{
string tmp;
if(x.n1.CompareTo(x.n2)<0)
{
tmp = x.n1;
x.n1 = x.n2;
x.n2 = tmp;
}
if (x.n2.CompareTo(x.n3) < 0)
{
tmp = x.n2;
x.n2 = x.n3;
x.n3 = tmp;
}
if (x.n1.CompareTo(x.n2) < 0)
{
tmp = x.n1;
x.n1 = x.n2;
x.n2 = tmp;
}
return x.n1 + x.n2 + x.n3;
}
#region IEqualityComparer<Line> 成员
public bool Equals(Line x, Line y)
{
return MakeSort(ref x) == MakeSort(ref y);
}
public int GetHashCode(Line obj)
{
return MakeSort(ref obj).GetHashCode();
}
#endregion
}
class MyClass
{
static void Main(string[] args)
{
//准备
Line[] list =
{
new Line{ id = 1, n1 = "c1", n2 = "c2", n3 = "c3" },
new Line{ id = 2, n1 = "c2", n2 = "c3", n3 = "c1" },
new Line{ id = 3, n1 = "c3", n2 = "c1", n3 = "c2" },
new Line{ id = 4, n1 = "c4", n2 = "c1", n3 = "c5" },
};
//执行
Line[] listOk = list.Distinct(new Tools()).ToArray();
//验证
foreach (var x in listOk)
{
Console.WriteLine(x.id + " " + x.n1 + " " + x.n2 + " " + x.n3);
}
//1 c3 c2 c1
//4 c5 c4 c1
Console.ReadKey();
}
}