范型List<>排序的问题解决方案
一个项目中用到List<>中是一个类的实例,并且需要对多个List<>进行排序的问题,结合上网查询得出以下的方法。
其中第三个解决方案是qihangnet给出的,效率是最高的
项目中的类用一个P类来代替
public class P
{
public int Key { set;get;}
public string Value{set;get;}
}
实际运用过程中P有三个实例
P p1 = new P() { Key=1, Value="甲" };
P p2 = new P() { Key=2, Value="乙" };
P p3 = new P() { Key = 3, Value = "丙" };
1、如果列表建立如下:
List<P> lp1 = new List<P>();
lp1.Add(p1);
lp1.Add(p2);
List<P> lp2 = new List<P>();
lp2.Add(p1);
lp2.Add(p2);
如果:
Console.WriteLine(lp1==lp2);
结果false,很正常,因为lp1和lp2的引用位置不相同,自然是不相等的。除非直接lp1=lp2,否则这两个值总是不相等的。
Console.WriteLine(lp1.SequenceEqual(lp2));
结果true,因为SequenceEqual比较的是List<>里面序列
2、如果列表中添加的顺序不一样
List<P> lp1 = new List<P>();
lp1.Add(p1);
lp1.Add(p2);
List<P> lp2 = new List<P>();
lp2.Add(p2);lp2.Add(p1);
结果:
Console.WriteLine(lp1==lp2);
Console.WriteLine(lp1.SequenceEqual(lp2));
均是false,因为顺序也不一样了SequenceEqual按顺序比较也不相等了
3、这个时候就需要使用SortedList对内部的项目自动进行排序了
无论是:
SortedList<int, P> slp1 = new SortedList<int, P>();
slp1.Add(p1.Key,p1);
slp1.Add(p2.Key,p2);
SortedList<int, P> slp2 = new SortedList<int, P>();
slp2.Add(p1.Key, p1);
slp2.Add(p2.Key, p2);
还是:
SortedList<int, P> slp1 = new SortedList<int, P>();
slp1.Add(p1.Key,p1);
slp1.Add(p2.Key,p2);
SortedList<int, P> slp2 = new SortedList<int, P>();
slp2.Add(p2.Key, p2);
slp2.Add(p1.Key, p1);
Console.WriteLine(slp1.SequenceEqual(slp2));
结果都为true了。
在这我想请教一下高手,有没有别的更好的办法,判断List<>是否相等