栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

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

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

一、泛型集合List排序

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

 List list = new List() { 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");
   }

 

二、对自定义类型进行排序

定义一个普通类:

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

接下来,将定义的Person实例化,排序;

List list = new List() {
 new Person(){Name="张叁",Id=1},
 new Person() {Name="李四",Id=4 },
  new Person() {Name="王五",Id=2 },
      };
      list.Sort();
      foreach (var item in list)
      {
 Console.Write(item.Id);
      }

结果如下:

在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泛型接口,请看下面的代码:

public class PersonNameDesc : IComparer
  {
    //存放排序器实例
    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() {
 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();

结果如下:

四、使用linq进行排序

sort方法的一个重载是Comparison类型的参数;

那就看一下 Comparison是怎么一回事吧:

List list = new List()
      {
 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((a, b) => a.Id - b.Id);
      foreach (Person p in list)
      {
 Console.WriteLine(p.Name + "t" + p.Id);
      }
      Console.Read();

结果如下:

List list = new List()
      {
 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 },
      };
      var l = from p in list
   orderby p.Id descending
   select p;
      foreach (Person p in l)
      {
 Console.WriteLine(p.Name + "t" + p.Id);
      }
      Console.Read();

结果如下:

今天的分享就到这里了,好久没写过博客了,加班多,太忙了,抽空复习一下基础知识;

到此这篇关于C# 泛型集合的自定义类型排序的实现的文章就介绍到这了,更多相关C# 泛型集合的自定义类型排序内容请搜索考高分网以前的文章或继续浏览下面的相关文章希望大家以后多多支持考高分网!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/121685.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号