• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C# 泛型集合的自定义类型排序的实现

c# 搞代码 4年前 (2022-01-09) 31次浏览 已收录 0个评论

一、泛型集合List<T>排序

经sort方法之后,采用了升序的方式进行排列的。

 List<int> list = new List<int>() { 2, 4, 1, 3, 5, -2, 0, 10 };
   Console.Write("排序前...");
   foreach (var item in list)
   {
    Console.Write(item + "\t");
   }
   list.Sort();
   Console.WriteLine();
   Console.WriteLine("排序后...");
   foreach (var item in list)
   {
    Console.Write(item + "\t");
   }

在int类型中实现了IComparable,所以可以通过Sort()直接排序;

int类型是实现了IComparable这个接口的。那么如果让自定义类型Person也可以排序,那么试试实现该接口;

那么将上面的代码修改一下看看

public class Person:IComparable
  {
    public int Id { get; set; }
    public string Name { get; set; }

    public int CompareTo(object obj)
    {
      Person p = obj as Person;
      return this.Id.CompareTo(p.Id);
    }
  }

结果如下:

三、对集合按照多种不同规则进行排序

实际使用中,经常需要对集合按照多种不同规则进行排序,这就需要定义其他比较规则,可以在Compare方法中定义,该方法属于IComparer<T>泛型接口,请看下面的代码:

public class PersonNameDesc : IComparer<Person>
  {
    //存放排序器实例
    public static PersonNameDesc NameDesc = new PersonNameDesc();
    public int Compare(Person x, Person y)
    {
      return System.Collections.Comparer.Default.Compare(x.Name, y.Name);
    }
  }

Compare方法的参数为要进行比较的两个同类型对象,返回值为int类型,返回值处理规则与CompareTo方法相同。其中的Comparer.Default返回一个内置的Comparer对象,用于比较两个同类型对象。

下面用新定义的这个比较器对集合进行排序:

//================对集合按照多种不同规则进行排序=========================
      List< Person > list = new List<Person>() {<span>本文来源gaodai#ma#com搞*代#码9网#</span>
        new Person(){Name="张叁",Id=1},
        new Person() {Name="李四",Id=4 },
         new Person() {Name="王五",Id=2 },
         new Person() {Name="李四",Id=6 },
         new Person() {Name="王五",Id=3 },
      };
      list.Sort(PersonNameDesc.NameDesc);
      foreach (var item in list)
      {
        Console.Write(item.Name + "\t");
      }
      Console.Read();

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C# 泛型集合的自定义类型排序的实现

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址