c#中实现对象集合的排序可以使用ArrayList中的Sort()方法,而有比较才能谈排序,因为不是基本类型(如string ,int.double......等)所以.NET Framework不可能一一制定他们的比较规则,那么则需要程序员自行制定,而比较规则的制定就需要通过继承这两个接口>之一来实现。制定了比较规则后则才可以用以下两种方式之一调用排序:
(1)ArrayList实例.Sort(); // IComparable
(2)ArrayList实例.Sort(实现Icomparer接口的类); // Icomparer

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;namespace Demo3
{class Program{static void Main(string[] args){//新建集合people用来存放person实例ArrayList people = new ArrayList();//建立4个person实例Person person1 = new Person("Jone", 18);Person person2 = new Person("Tom", 20);Person person3 = new Person("Lily", 15);Person person4 = new Person("July", 25);//将实例添加到people集合中people.Add(person1);people.Add(person2);people.Add(person3);people.Add(person4);//输出原来序列Console.WriteLine("原来序列:");foreach (Person person in people){Console.WriteLine("person name: {0}  age:{1}", person.Name, person.Age);}//用实现Icomparable进行排序people.Sort();//用实现Icomparable的方法输出排序后的序列Console.WriteLine("按年龄排序后的序列:");foreach (Person person in people){Console.WriteLine("person name: {0}  age:{1}", person.Name, person.Age);}//用实现Icomparer的方法进行排序people.Sort(PersonComparer.Default);//用实现Icomparer的方法输出排序后的序列Console.WriteLine("按名称排序后的序列:");foreach (Person person in people){Console.WriteLine("person name: {0}  age:{1}", person.Name, person.Age);}Console.ReadKey();}}public class Person : IComparable{/// <summary>/// 两个私有字段:/// 人物姓名;/// 人物年龄;/// </summary>private string name;private int age;/// <summary>/// 构造函数/// </summary>public Person(string myname, int myage){name = myname;age = myage;}/// <summary>/// 两个共有属性:/// 分别对应两个私有字段;/// </summary>public string Name{set{name = value;}get{return name;}}public int Age{set{age = value;}get{return age;}}public int CompareTo(object myobject){if (myobject is Person)//用is运算符判断要比较的对象是否是Person对象{//如果是用as运算符进行对象转换,返回年龄比较结果(一个整数,表示两者差)Person myperson = myobject as Person;return this.Age - myperson.Age;//return myperson.Age - this.Age;}else{//如果不是,抛出异常throw new ArgumentException("Object to compare to is not a Person Object");}}}public class PersonComparer : IComparer{//静态字段,方便使用,没有也可,调用方法会变public static IComparer Default = new PersonComparer();public int Compare(object myperson1, object myperson2){//用is运算符判断要比较的对象是否都是Person对象if (myperson1 is Person && myperson2 is Person){//如果是,调用.Net Framework已经实现好的能比较基本类型的函数:Comparer.Default.Compare//(要用using System.Collections;)return Comparer.Default.Compare(((Person)myperson1).Name, ((Person)myperson2).Name);}else{//如果不是抛出异常throw new ArgumentException("One or both objects to compare are not Person objects.");}}}
}

方法论:读书加上网查询相关资料,能够更好的理解知识点。

本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/6796626.html,如需转载请自行联系原作者

Icomparer和Icomparable集合排序相关推荐

  1. 写了一个对象集合排序的类

    写了一个对象集合排序的类 废话不多说,首先是定义一个对象实体类     class Entity     {         public Entity()         {}         pr ...

  2. java怎么给list集合排序_java list集合排序按某一属性排序操作

    我就废话不多说了,大家还是直接看代码吧~ public List sortList(List list){ Collections.sort(list, new Comparator(){ @Over ...

  3. 【Java基础篇】集合排序

    所谓集合排序是指对集合内的元素进行排序. 集合工具类Collections中提供了两种排序算法,分别是: Collections.sort(List list) Collections.sort(Li ...

  4. java8新特性:对map集合排序

    一.简单介绍Map 在讲解Map排序之前,我们先来稍微了解下map,map是键值对的集合接口,它的实现类主要包括:HashMap, TreeMap, Hashtable以及LinkedHashMap等 ...

  5. java 集合排序方法_java集合排序方法sort的使用

    转自  http://blog.csdn.net/a1165117473/article/details/6965652 /* * To change this template, choose To ...

  6. 使用stream流进行集合排序取最大值,根据集合中的bigdemal属性排序(正序反序)并取最大值

    业务: 求折线图的UPH图相关数据,前端动态修改纵轴的峰值,需要后端获取最大值 1)根据集合某个属性(业务以bigdecimal数据为例)进行集合排序,包括升序反序 2)根据集合的某个number数值 ...

  7. Java集合排序及java集合类详解

    Java集合排序及java集合类详解 (Collection, List, Set, Map) 摘要内容 集合是Java里面最常用的,也是最重要的一部分.能够用好集合和理解好集合对于做Java程序的开 ...

  8. Scala中的集合排序

    Scala中的集合排序 在scala中,排序不再像java中的那么复杂,除了Map之外,其他的集合类型都可以使用自己的排序方法,排序方法主要有三个: 1.sorted 2.sortWith 3.sor ...

  9. java8新特性:对map集合排序,根据key或者value操作排序(升序、降序)

    java8新特性:对map集合排序,根据key或者value操作排序(升序.降序) 直接上代码: package com.drew.test; import java.util.List; impor ...

最新文章

  1. 超酷实用的jQuery焦点图赏析及源码
  2. 排序算法学习——冒泡排序
  3. 第三届山东大数据-威海赛区-民宿空置预测-排行榜
  4. 深入了解asp.net框架。生命周期以及事件处理机制
  5. python 月活_TikTok用户月活超1亿意味着什么?什么是月活用户?
  6. 通过超分辨率重构来提高二维码的对比度
  7. 统一变更域本地管理员密码
  8. Python中的具名元组类用法
  9. mysql backup restore_mysql-backup-restore
  10. IDEA---Project下看不见项目目录
  11. visio流程图怎么合并线_visio图形怎么合并? visio合并图形的方法
  12. 用js企业微信推送通知
  13. HTML 按钮交互,20 个交互非常棒的按钮代码_html/css_WEB-ITnose
  14. 脑瘫患儿家庭的森森林林双包胎赴京演出圆满成功!
  15. Unity Transform 学习
  16. console的基础使用
  17. 小程序开发如何租用服务器
  18. 高德地图(实时获取定位)
  19. MacOS 下 TeXstudio 深色背景主题设置
  20. android系统(148)---android 8.1关机闹钟

热门文章

  1. VTK:PolyData之ExtractSelectionCells
  2. VTK:图片之ImageNoiseSource
  3. VTK:几何对象之EllipticalCylinderDemo
  4. OpenGL Compute Shader Raytracing 计算着色器光线追踪的实例
  5. OpenGL灰色滤镜
  6. C++希尔密码Hill Cipher算法(附完整源码)
  7. C++绝不在构造和析构过程中调用virtual函数
  8. C语言函数——常用数学函数
  9. python 聚类算法包_Python聚类算法之DBSACN实例分析 python怎么用sklearn包进行聚类
  10. iphone微信美颜插件_iPhone、安卓微信自动更新,又有新功能?