范型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<>是否相等

posted @ 2009-01-06 23:11  小鲨  阅读(226)  评论(0编辑  收藏  举报