IComparable与IComparer
来源:互联网 发布:linux dhcp命令 编辑:程序博客网 时间:2024/06/08 12:11
1.当我们要对集合进行排序时,集合中的元素必须要是一类元素,且元素的类型实现了IComparable接口
ArrayList arr = new ArrayList() { 0, 8, 32, 4, 2, 432, 5, 234, 54323, 875, 45 }; arr.Sort(); for (int i = 0; i < arr.Count; i++) { Console.Write("{0} ",arr[i]); } Console.ReadKey();
结果是:
...............................................................
0 2 4 5 8 32 45 234 432 875 54323
这是因为int类型继承了IComparable接口,因此可以排序
2.那么我们是否可以为自定义的类型进行排序呢,答案是一定的
我们想为Person这个类按照某种条件进行排序,那么首先它必须实现Icomparable接口,以及实现这个接口中的方法CompareTo
class Person : IComparable { public string Name { get; set; } public int Age { get; set; } public int CompareTo(object obj) { Person p = obj as Person; if (p == null) { throw new ArgumentException(); } else { return this.Age-p.Age; //return this.Name.Length - p.Name.Length; } } }按照年龄进行升序排序
ArrayList arr = new ArrayList() { new Person(){ Name="Alice Wang", Age=19}, new Person(){ Name="Wayen Li", Age=12}, new Person(){ Name="Chris Sun", Age=21}, new Person(){ Name="Jerry Huang", Age=22} }; Console.WriteLine("排序之前:"); for (int i = 0; i < arr.Count; i++) { Console.WriteLine(((Person)arr[i]).Name); } //IComparable //升序排序 arr.Sort(); Console.WriteLine("排序之后:"); for (int i = 0; i < arr.Count; i++) { Console.WriteLine(((Person)arr[i]).Name); } Console.ReadKey();
结果是:
.........................................................................
Wayen Li
Alice Wang
Chris Sun
Jerry Huang
如果按照名字的长度进行排序的话,结果是
.........................................................................
Wayen Li
Chris Sun
Alice Wang
Jerry Huang
3.我们也可以定义一个类,继承自IComparer接口,用作比较器
class Person { public string Name { get; set; } public int Age { get; set; } } class PersonSortByAgeAsc : IComparer { #region IComparer 成员 public int Compare(object x, object y) { Person p1 = x as Person; Person p2 = y as Person; if (p1 != null && p2 != null) { return p1.Age - p2.Age; } else { throw new ArgumentException(); } } #endregion }按年龄大小进行升序排列
ArrayList arr = new ArrayList() { new Person(){ Name="Alice Wang", Age=19}, new Person(){ Name="Wayen Li", Age=12}, new Person(){ Name="Chris Sun", Age=21}, new Person(){ Name="Jerry Huang", Age=22} };
//按照年龄升序排序 arr.Sort(new PersonSortByAgeAsc()); for (int i = 0; i < arr.Count; i++) { Console.WriteLine(((Person)arr[i]).Name); } Console.ReadKey();结果是:
.........................................................................
Wayen LiAlice Wang
Chris Sun
Jerry Huang
0 0
- IComparable与IComparer
- IComparable<T> 与 IComparer<T>
- IComparable IComparer 比较器实例与使用
- IComparable and IComparer
- IComparable,IComparer排序实例
- IComparer IComparable比较大小
- IComparer 和 IComparable
- IComparable IComparer应用
- IComparable和IComparer
- icomparable和icomparer
- 泛型 和IComparable、IComparer
- IComparable和Icomparer接口
- IComparable VS IComparer
- IComparable和IComparer接口
- 对象的比较与排序:IComparable和IComparer接口
- 对象的比较与排序:IComparable和IComparer接口
- .NET框架中的IComparable、IComparable、IComparer、IEqualityComparer
- IComparer和IComparable的区别
- (二)卷积神经网络
- oracle没法编译对象
- javascript prototype,executing,context,closure
- Android NDK开发之 NEON基础介绍
- centos 7.0一键安装openstack
- IComparable与IComparer
- jQuery源码分析14--get与eq的区别
- iOS 语音类App播放自己的录音完毕后,如何重新继续播放音乐
- MOS管之高端驱动与低端驱动实际应用
- android 实现按住说话功能
- VISUALSVN 5.1.2 破解
- HierarchyViewer无法连接真机调试
- 禁止Android中的返回键
- iOS中消息的传递机制