c# 根据对象的属性进行排序

使用List<T>容器提供的Sort(IComparer<T> comparer)方法,实现对象根据某个属性进行排序。说明如下:

1、自定义类Person

    class Person
    {
        public int id;
        public string name;
        public int age;
        public DateTime dateTime;
    }

2、创建时间比较器

    // 时间比较器
    class TimeComparer : IComparer<Person>
    {
        //实现升序
        public int Compare(Person x, Person y)
        {
            return (x.dateTime.CompareTo(y.dateTime));
        }
    }

IComparer是泛型接口,参数使用我们用来比较的对象的类型。同理,年龄比较器如下

// 年龄比较器
    class AgeComparer : IComparer<Person>
    {
        //实现升序
        public int Compare(Person x, Person y)
        {
            return (x.age.CompareTo(y.age));
        }
    }

3、创建List<Person>容器

 List<Person> listPerson = new List<Person>();

4、向容器中添加1000个对象

Person p ;
Random rd = new Random();
for(int i = 0; i < 1000; i++)
{
     p = new Person();
     p.id = i;
     p.name = "";
     p.age = rd.Next(10, 30);
     p.dateTime = DateTime.Now;
     listPerson.Add(p);
     Thread.Sleep(1);
}

5、调用sort方法排序

 listPerson.Sort(new TimeComparer());

6、排序结果

7、全部代码

using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using static System.Net.Mime.MediaTypeNames;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("打开软件\r\n");
             
            List<Person> listPerson = new List<Person>();
            Person p ;
            Random rd = new Random();
            Stopwatch sp = new Stopwatch();
            for(int i = 0; i < 1000; i++)
            {
                p = new Person();
                p.id = i;
                p.name = "";
                p.age = rd.Next(10, 30);
                p.dateTime = DateTime.Now;
                listPerson.Add(p);
                Thread.Sleep(1);
            }

            sp.Restart();
            // 按时间排序
            listPerson.Sort(new TimeComparer());

            // 按年龄排序
            //listPerson.Sort(new AgeComparer());
            sp.Stop();
            Console.WriteLine("排序耗时:"+ sp.ElapsedMilliseconds);
            Console.WriteLine("");

            for (int i = 0; i < listPerson.Count; i++)
            {
                Console.WriteLine("编号:"+listPerson[i].id);
                Console.WriteLine("年龄:"+listPerson[i].age);
                Console.WriteLine("时间:"+listPerson[i].dateTime.ToString("yyyy/MM/dd HH:mm:ss.ffff"));
                Console.WriteLine("");
            }
            Console.ReadLine();
            return;
        }
    }

    class Person
    {
        public int id;
        public string name;
        public int age;
        public DateTime dateTime;
    }

    // 年龄比较器
    class AgeComparer : IComparer<Person>
    {
        //实现升序
        public int Compare(Person x, Person y)
        {
            return (x.age.CompareTo(y.age));
        }
    }

    // 时间比较器
    class TimeComparer : IComparer<Person>
    {
        //实现升序
        public int Compare(Person x, Person y)
        {
            return (x.dateTime.CompareTo(y.dateTime));
        }
    }
}

 

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值