ICompare接口、Sort()方法
1、接口中的方法并不实现具体功能,继承于该接口的类必须实现具体功能。
核心思想:对修改封闭,对扩展开放。
2、Sort()方法:
默认:Sort(内容)
英文:按照首字母顺序排序,首字母相同则看第二个字母;
数字:从小到大排序;
自定义 Sort(内容,排序规则)
内容按照自定义的规则排序。
host类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleEnum
{
class host
{
[STAThread]
static void Main(string[] args)
{
// 创建一个数组,里面放汽车名和年份
car[] arrayOfCars = new car[6]
{
new car("Ford",1992),
new car("Fiat",1988),
new car("Buick",1932),
new car("Ford",1932),
new car("Dodge",1999),
new car("Honda",1977)
}; Console.WriteLine("排序前\n");
foreach (car c in arrayOfCars)
Console.WriteLine(c.Make + "\t\t" + c.Year); Console.WriteLine("\Sort默认正向排序 \n");
Array.Sort(arrayOfCars);
foreach (car c in arrayOfCars)
Console.WriteLine(c.Make + "\t\t" + c.Year);
Console.WriteLine("\Sort 按年份正向排序 )\n");
Array.Sort(arrayOfCars, car.sortYearAscending());
foreach (car c in arrayOfCars)
Console.WriteLine(c.Make + "\t\t" + c.Year); Console.WriteLine("\Sort 按汽车名正向排序 \n");
Array.Sort(arrayOfCars, car.sortMakeDescending());
foreach (car c in arrayOfCars)
Console.WriteLine(c.Make + "\t\t" + c.Year); Console.WriteLine("\Sort 按汽车名反向排序 \n");
Array.Sort(arrayOfCars, car.sortYearDescending());
foreach (car c in arrayOfCars)
Console.WriteLine(c.Make + "\t\t" + c.Year); Console.ReadLine();
}
}
}
Car类
using System;
using System.Collections;
namespace ConsoleEnum
{
public class car : IComparable
{
// 嵌套类:类中的类。 // 按年升序
private class sortYearAscendingHelper : IComparer
{
//实现接口定义的方法
int IComparer.Compare(object a, object b)
{
car c1 = (car)a;
car c2 = (car)b; if (c1.year > c2.year)
return 1; if (c1.year < c2.year)
return -1; else
return 0;
}
} // 按年降序
private class sortYearDescendingHelper : IComparer
{ //实现接口定义的方法
int IComparer.Compare(object a, object b)
{
car c1 = (car)a;
car c2 = (car)b; if (c1.year < c2.year)
return 1; if (c1.year > c2.year)
return -1; else
return 0;
}
} // 按汽车名字母降序
private class sortMakeDescendingHelper : IComparer
{ //实现接口定义的方法
int IComparer.Compare(object a, object b)
{
car c1 = (car)a;
car c2 = (car)b; return String.Compare(c2.make, c1.make);
}
} private int year;
private string make; //构造函数
public car(string Make, int Year)
{
make = Make;
year = Year;
} //属性
public int Year
{
get { return year; }
set { year = value; }
} public string Make
{
get { return make; }
set { make = value; }
} // 实现IComparable接口来提供默认的排序顺序的对比。
public int IComparable.CompareTo(object obj)
{
car c = (car)obj;
//调用了C#中封装的类,详情见下一篇
return String.Compare(this.make, c.make);
} //因为这里使用了嵌套类,把嵌套类包裹到方法中方便调用(类名.方法名)
public static IComparer sortYearAscending()
{
//调用了上面的类
return (IComparer)new sortYearAscendingHelper();
} public static IComparer sortYearDescending()
{
//调用了上面的类
return (IComparer)new sortYearDescendingHelper();
} public static IComparer sortMakeDescending()
{
//调用了上面的类
return (IComparer)new sortMakeDescendingHelper();
} }
}
ICompare接口、Sort()方法的更多相关文章
- Array类的Sort()方法
刚复习了Array类的sort()方法, 这里列举几个常用的,和大家一起分享. Array类实现了数组中元素的冒泡排序.Sort()方法要求数组中的元素实现IComparable接口.如System. ...
- C# Array类的Sort()方法
Array类实现了数组中元素的冒泡排序.Sort()方法要求数组中的元素实现IComparable接口.如System.Int32 和System.String实现了IComparable接口,所以下 ...
- ArrayList 排序Sort()方法扩展
1.sort() sort可以直接对默认继承 IComparable接口的类进行排序,如:int.string.... ArrayList arrayList = new ArrayList(); , ...
- .NET中string[]数组和List<string>泛型的相互转换以及Array类的Sort()方法(转)
从string[]转List<string>: " }; List<string> list = new List<string>(str); 从List ...
- 定制对ArrayList的sort方法的自定义排序
java中的ArrayList需要通过collections类的sort方法来进行排序 如果想自定义排序方式则需要有类来实现Comparator接口并重写compare方法 调用sort方法时将Arr ...
- 用Java集合中的Collections.sort方法对list排序的两种方法
用Collections.sort方法对list排序有两种方法第一种是list中的对象实现Comparable接口,如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
- 关于Collections中的sort()方法总结
用Java集合中的Collections.sort方法对list排序的两种方法 本文部分引用自:http://my.oschina.net/leoson/blog/131904 用Collection ...
- java中Collections.sort()方法实现集合排序
1.Integer/String泛型的List进行排序 List <Integer> integerlist = new ArrayList<Integer>(); //定 ...
- java中的排序(自定义数据排序)--使用Collections的sort方法
排序:将一组数据按相应的规则 排列 顺序 1.规则: 基本数据类型:日常的大小排序. 引用类型: 内置引用类型(String,Integer..),内部已经指定规则,直接使用即可.---- ...
- 009-jdk1.8版本新特性一-展方法,Lambda表达式,函数式接口、方法引用构造引用
一.JDK1.8 名称:Spider(蜘蛛) 发布日期:2014-03-18 新特性: 1.1.扩展方法[接口的默认方法] Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 defaul ...
随机推荐
- 前端自动化构建工具gulp的使用总结
前端自动化构建工具gulp的使用总结 博主最近偶的空闲,在此对gulp的使用做一个总结,让小伙伴知道如何合理的使用gulp以及gulp的使用技巧. 谈到gulp,有人可能就会想到另外一个构建工具gru ...
- hibernate笔记--单向一对多映射方法
上一篇讲的是单向多对一的表关系,与单向一对多的关系正好相反,如下图所示关系: ,可以看出年级表和学生表是一对多的关系,一条年级信息对应多条学生信息,在hibernate中成为单向的一对多的映射关系,应 ...
- FineUI Grid控件高度自适应
引言 页面里使用f:Grid控件,添加分页功能,然后高度填充整个页面. 如何使用 使用FineUI 控件的每个页面都有一个f:PageManager控件,它包含属性:AutoSizePanelID,设 ...
- jQuery-1.9.1源码分析系列(十) 事件系统——事件体系结构
又是一个重磅功能点. 在分析源码之前分析一下体系结构,有助于源码理解.实际上在jQuery出现之前,Dean Edwards的跨浏览器AddEvent()设计做的已经比较优秀了:而且jQuery事件系 ...
- web性能优化:详说浏览器缓存
TOC 背景 浏览器的总流程图 一步一步说缓存 朴素的静态服务器 设置缓存超时时间 html5 Application Cache Last-Modified/If-Modified-Since Et ...
- 获取linux服务器基本信息脚本
为了方便日常运维写的一段简单脚本,用于集中获取服务器操作系统.CPU.内存使用.负载.硬盘使用.网络信息. 脚本比较简单,就不解释了,有兴趣的朋友请自行查看. #!/bin/bash##Name:sy ...
- 背水一战 Windows 10 (27) - 控件(文本类): TextBlock
[源码下载] 背水一战 Windows 10 (27) - 控件(文本类): TextBlock 作者:webabcd 介绍背水一战 Windows 10 之 控件(文本类) TextBlock 示例 ...
- php xml 文件读取 XMLReader
php xml 文件读取 <?php /** $xmlString = '<xml> <persons count="10"> <person ...
- 【nodejs笔记1】配置webstorm + node.js +express + mongodb开发博客的环境
1. 安装webstorm 并破解 2. 安装node (以及express框架) 至官网下载并安装.(http://nodejs.org)v0.10.32 msi 安装后测试,打开命令行, c ...
- C++_系列自学课程_第_7_课_数组_《C++ Primer 第四版》
说到数组,大家应该都很熟悉,在C.Pascal.Java等语言中,都有数组的概念.在C++中也提供了对数组的支持.数组简单来说就是一堆相同 数据类型对象的集合. 这里要把握住两个要点: 相同的数据类型 ...