List排序(匿名方法)

来源:互联网 发布:win7仿mac dock栏 编辑:程序博客网 时间:2024/05/18 01:32

如果在List中存入的是单个变量,用List.Sort便可以执行升序,用List.Reverse执行降序操作;

以下List<int>为例:

 List<int> lis = new List<int>();
            lis.Add(5);
            lis.Add(3);
            lis.Add(1);
            lis.Add(7);
            lis.Add(8);
            lis.Sort();
            foreach(int number in lis)
            {
                Console.Write(number);
            }
            Console.WriteLine();
            lis.Reverse();
            foreach (int number in lis)
            {
                Console.Write(number);
            }

但是抽象一个用户的类,类里面有用户名,密码等信息存入List中,用以上方法进行排序或者降序显然是做不到的:

 public class people
    {
        private string username;
        public string Username
        {
            get { return username; }
            set { username = value; }
        }
        private string userpass;
        public string Userpass
        {
            get { return userpass; }
            set { userpass = value; }
        }
        public people(string name, string pass)
        {
            this.username = name;
            this.userpass = pass;
        }


    }
    class Program
    {
        static void Main(string[] args)
        {
            List<people> list = new List<people>();
            list.Add(new people("李小华", "423456"));
            list.Add(new people("黄小强", "223456"));
            list.Add(new people("张大虎", "323456"));
            list.Sort();
            foreach (people number in list)
            {
                Console.Write(number);
            }

按照以上方法进行排序,执行编译后,编译器显示为:


那么如何将这个类进行排序呢?

首先想实现排序,必须以这个类中的一个属性为标准(让此属性前后两个值相互比较),那么就用到了匿名函数方法,将以上          list.Sort();  改为:

list.Sort
                (
                delegate(people x, people y)
                {
                    return x.Userpass.CompareTo(y.Userpass);  //升序
                });
            foreach (people number in list)
            {
                Console.WriteLine(number.Username + " " + number.Userpass);
            }

通过匿名方法实现了这个类的密码属性两两之间相互比较进而实现List中存放People这个类的升序。

还有一种用Lambda(=>或者=<)方法

     list.Sort
                (
                (x, y) =>
                {
                    return -x.Userpass.CompareTo(y.Userpass); //倒序
                });
            foreach (people number in list)
            {
                Console.WriteLine(number.Username + " " + number.Userpass);
            }

 

还有一种排序是通过接口实现的:

  class People : IComparable<People>
    {
        private int _id;
        private string _name;


        public People(int id, string name)
        {
            this._id = id;
            this.Name = name;
        }


        public int Id
        {
            get
            {
                return _id;
            }


            set
            {
                _id = value;
            }
        }


        public string Name
        {
            get
            {
                return _name;
            }


            set
            {
                _name = value;
            }
        }


        //重写ToString
        public override string ToString()
        {
            return "ID:" + _id + "   Name:" + _name;
        }
        public int CompareTo(People other)
        {
            return this.Name.CompareTo(other.Name);
        }


    }
    class Program
    {
        static void Main(string[] args)
        {
            List<People> list = new List<People>();
            Random r = new Random();
            //添加数据
            for (int i = 0; i < 10; i++)
            {
                int j = r.Next(0, 10);
                list.Add(new People(j, "name" + j));
            }


            Console.WriteLine("排序前:");
            foreach (var p in list)
            {
                Console.WriteLine(p);
            }


            list.Sort();//排序
            Console.WriteLine("排序后:");
            foreach (var p in list)
            {
                Console.WriteLine(p);
            }
        }
    }

简单介绍List的排序,希望对大家有帮助!

原创粉丝点击