泛型 List中的Sort三个方法(单个字段排序+多个字段排序)

常用的两种使用scort()进行排序的方法
对于List按照某一个字段的值进行排序,使用系统提供的sort方法进行排序,需要继承ICompare接口实现参数中的CompareTo方法,注意参数一定是Object。CompareTo方法只能进行两个数据的比较,但是系统可以实现对整个list中的数据的排序。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
List stuList = new List();
            stuList.Add(s1);
            stuList.Add(s2);
            stuList.Add(s3);
            stuList.Add(s4);
            stuList.Add(s5);
            stuList.Add(s6);
 
            for (int i = 0; i < stuList.Count; i++)
            {
                Console.WriteLine(stuList[i]);
            }
            Console.WriteLine("------------------------");
            stuList.Sort();
            for (int i = 0; i < stuList.Count; i++)
            {
                Console.WriteLine(stuList[i]);
            }
public int CompareTo(object other)
        {
            return this.Age - ((Student)other).Age;
        }

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ps:可以通过改变this.Age和other.Age的顺序控制是升序还是降序,方法的返回值必须和接口中的方法保持一致

参考多个字段进行排序
自己实现方法,方法的返回值必须是int,在sort中使用lambda表达式实现排序
可以通过设置权重来控制字段的优先级

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 List stuList = new List();
            stuList.Add(s1);
            stuList.Add(s2);
            stuList.Add(s3);
            stuList.Add(s4);
            stuList.Add(s5);
 
        多个方法之间要使用 + 号
            stuList.Sort(((x, y) => x.sortByAge(y) * 4 + x.sortByChinese(y)));//系统规定必须是int
 
            for (int i = 0; i < stuList.Count; i++)
            {
                Console.WriteLine(stuList[i]);
            }
 
    public int sortByAge(Student s)
        {
            int result = this.Age - s.Age;
            return result==0?0:(result>0?1:-1);
        }
        public int sortByChinese(Student s)
        {
            int result= (int)(s.Chinese-this.Chinese);//变量的位置确定了正序还是倒序
            return result == 0 ? 0 : (result > 0 ? 1 : -1);
        }

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

--------------------- 
作者:高冷技术宅 
来源:CSDN 
原文:https://blog.csdn.net/qq_38280936/article/details/77776495?utm_source=copy 
版权声明:本文为博主原创文章,转载请附上博文链接!

 

下面附上自己写的:自定义的数据类TreeViewData

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

///


/// 树形菜单数据
///

public class TreeViewData
{
    ///
    /// 数据内容
    ///

    public string Name;
    ///
    /// 数据所属的父ID
    ///

    public int ParentID;
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 void Awake()
    {
        List datas = new List();

        TreeViewData data = new TreeViewData();

       for (int i = 0; i < length; i++)//多次填充,依据parentID(主)和Name(次)排序
        {
            data = new TreeViewData();
            data.Name = "1.1.1.2.1.第一题";
            data.ParentID = 8;
            datas.Add(data);
        }
        datas.Sort((x, y) => sortByTreeViewDataParentID(x,y)*4+sorByTreeViewDataName(x,y));//系统规定必须是int

 }


    public int sortByTreeViewDataParentID(TreeViewData x,TreeViewData y)
    {
        int result = x.ParentID - y.ParentID;
        return result == 0 ? 0 : (result > 0 ? 1 : -1);
    }
    public int sorByTreeViewDataName(TreeViewData x, TreeViewData y) {
        CultureInfo PronoCi = new CultureInfo(2052);
        int result = string.Compare(y.Name, x.Name, true,PronoCi);
        return result == 0 ? 0 : (result>0?1:-1);
    }

以上可以起到对List排序效果;

上述的lamda表达式还可以修改成如下:(默认是汉字拼音的读音顺序)

 CultureInfo PronoCi = new CultureInfo(2052);

 datas.Sort((x, y) =>
                    {
                        int result;
                        if (x.building_name == y.building_name)
                        {
                            result = 0;
                        }
                        else
                        {
                            if (string.Compare(x.building_name, y.building_name, true, PronoCi) > 0)
                            {
                                result = 1;
                            }
                            else
                            {
                                result = -1;
                            }
                        }
                        return result;
                    });

你可能感兴趣的:(语言的艺术)