博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ArrayList排序
阅读量:5296 次
发布时间:2019-06-14

本文共 4086 字,大约阅读时间需要 13 分钟。

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Collections; 6  7 namespace ArrySort 8 { 9     class Program10     {11         static void Main(string[] args)12         {13             ArrayList arry = new ArrayList() { new Person() { Name = "apple", Age = 12 }, new Person() { Name = "dog", Age = 64 }, new Person() { Name = "cat", Age = 41 } };14             Console.WriteLine("排序之前");15             for (int i = 0; i < arry.Count; i++)16             {17                 Console.WriteLine(((Person)arry[i]).Name);18             }19             arry.Sort();20             Console.WriteLine("排序之后");21             for (int i = 0; i < arry.Count; i++)22             {23                 Console.WriteLine(((Person)arry[i]).Name);24             }25             Console.ReadKey();26         }27 28         public class Person : IComparable//实现IComparable接口,则可以调用排序方法Sort(),否则对于有多个参数的对象,Sort()方法不知道该具体比较哪一项29         {30             public string Name { get; set; }31             public int Age { get; set; }32 33             34             public int CompareTo(object obj)//返回值>0表示比比较对象大,=0跟比较对象相等,<0比比较对象小35             {36                 Person p = obj as Person;//因为传入的是object类型,所以要将传入的参数转换为需要比较的类型37                 if (p == null)38                 {39                     throw new ArgumentException();//参数无效异常40                 }41                 else42                 {43                     //return this.Age - p.Age;//可以自定义按照类型的某一属性进行比较44                     return this.Name.Length - p.Name.Length;45                 }46             }47         }48     }49 }

实现IComparable接口,则ArrayList可以调用排序方法Sort(),否则对于有多个参数的对象,Sort()方法不知道该具体比较哪一项

 

 

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Collections; 6  7 namespace UseOfICompare 8 { 9     class Program10     {11         static void Main(string[] args)12         {13             ArrayList array = new ArrayList() {
new Person(){Name = "Alice",Age = 42},new Person(){Name = "dog",Age = 62},new Person(){Name = "cat",Age = 15}};14 Console.WriteLine("比较前");15 for (int i = 0; i < array.Count; i++)16 {17 Console.WriteLine(((Person)array[i]).Name);18 }19 20 //array.Sort(new CompareByNameLength());21 array.Sort(new CompareByAge());22 23 Console.WriteLine("比较之后");24 for (int i = 0; i < array.Count; i++)25 {26 Console.WriteLine(((Person)array[i]).Name);27 }28 Console.ReadKey();29 }30 }31 32 public class Person33 {34 public string Name { get; set; }35 public int Age { get; set; }36 }37 38 public class CompareByNameLength : IComparer//实现IComparer接口,其实是做了一个比较器,比较器专门用来比较某一项,将比较器作为参数传入ArrayList的排序Sort()方法就可以实现比较了39 {40 public int Compare(object x, object y)//同样返回值是>0,<0,=041 {42 Person p1 = x as Person;43 Person p2 = y as Person;44 if (p1 == null && p2 == null)45 {46 throw new ArgumentException();//参数类型错误异常47 }48 else49 {50 return p1.Name.Length - p2.Name.Length;//按姓名长度比较51 }52 }53 }54 55 public class CompareByAge : IComparer56 {57 public int Compare(object x, object y)58 {59 Person p1 = x as Person;60 Person p2 = y as Person;61 if (p1 == null && p2 == null)62 {63 throw new ArgumentException();//参数类型错误64 }65 else66 {67 return p1.Age - p2.Age;68 }69 }70 }71 72 }

就一个Person对象来说,如果有两个属性,分别为Name和Age,如果某个时段想用Name长度来作为比较,某个时段想用Age大小来作为比较,如果让Person实现ICompareable接口就不太合适了,因为实现ICompareable接口再调用ArrayList的Sort()方法对按照在比较Person类中定义的规则进行一项的比较。

public int Compare(object x, object y)方法中传入两个对象是内部实现,只需要调用array.sort(new XXXXX());就可以了。

转载于:https://www.cnblogs.com/T-J-D/p/3931799.html

你可能感兴趣的文章
XSS原理及防范
查看>>
WPF中Image显示本地图片
查看>>
SVN版本管理
查看>>
匿名函数
查看>>
mongodb安全
查看>>
IntelliJ的.iml文件及相关的Class Not Found 问题
查看>>
nginx指定文件路径有两种方式root和alias
查看>>
随机排序整个数组
查看>>
哈希表等概率情况下查找成功和查找不成功的平均查找长度的计算
查看>>
Kubernetes源码阅读笔记——Scheduler(之一)
查看>>
js学习总结----多级菜单jquery版本
查看>>
外行人都能看得懂的机器学习,错过了血亏!
查看>>
Java - 单例模式
查看>>
Shell基础学习小结
查看>>
SATA主机协议的FPGA实现之准备工作
查看>>
java 操作 Excel,java导出excel
查看>>
ios 字典转模型
查看>>
[Cocos2d-x开发问题-3] cocos2dx动画Animation介绍
查看>>
android ListView优化
查看>>
免费的天气预报API--谷歌,雅虎,中央气象台
查看>>