C# List的排序问题

来源:互联网 发布:在线讲课软件 编辑:程序博客网 时间:2024/06/05 10:49

在C#中,可以List来代替C++中Vector。

对于LIST的排序,需要使用到Sort()方法,为了让排序方式按照我们自己的想法进行,

可以通过IComparable接口重写CompareTo方法来实现。

例子:

有一个包含人名,年龄等信息的LIST,我们需要根据年龄做从大到小或者从小到大的排序,做法如下:

publicclass MyInfo:IComparable<MyInfo>//定义MyInfo类,并继承IComparable
{    
    public int age;
    public double value;
    public string name;
    public int CompareTo(MyInfo obj)//重写排序方法,本例中按年龄排序
    {
        int iresult=-1;
        if(this.age==obj.age)
        {
            iresult=0;
        }
        else if(this.age.CompareTo(obj.age)<0)//从小到大排序,如需要从大到小则用>即可
        {
            iresult=1;
        }
        else
        {
            iresult=-1;
        }
        return iresult;
    }
}

调用部分:

List <MyInfo> mystr=newList<MyInfo>();                
            int []agearray=newint[]{20,30,60,14,16,42,34,45,22,31};
            string []names=newstring[]{"A","B","C","D","E","F","G","H","I","J"};            
            for(int i=0;i<10;i++)//在List中放入10个数据
            {MyInfo stem=newMyInfo();
                stem.name=names[i];
                stem.age=agearray[i];
                stem.value=i/3;                
            mystr.Add(stem);
            }            
            for(int i=0;i<10;i++)//显示一下排序前的效果          
            {
            lbLog.Items.Add("Name:"+mystr[i].name+",    age:"+mystr[i].age.ToString()+",    Score:"+mystr[i].value.ToString());  
            }
            lbLog.Items.Add("现在进行排序......");
            mystr.Sort();
            //mystr.s
            for(int i=0;i<10;i++)//显示一下排序后的效果
            {
            lbLog.Items.Add("Name:"+mystr[i].name+",    age:"+mystr[i].age.ToString()+",    Score:"+mystr[i].value.ToString());            
            }

运行结果:



0 0
原创粉丝点击