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 ...
随机推荐
- 再次记录 Visual Studio 2015 CTP 5 的一个坑
接上一篇:升级 Visual Studio 2015 CTP 5 的坑.坑.坑 升级到 VS2015 CTP 之后,今天要改项目中的一个东西,然后就不得不把 C# 6.0 改变的语法代码中改了下(之前 ...
- 1Z0-053 争议题目解析687
1Z0-053 争议题目解析687 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 687.Users are connected to a database instance th ...
- (十二) WebGIS中矢量图层的设计
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 在前几章中我们已经了解了什么是矢量查询.屏幕坐标与地理坐标之 ...
- JS实现输入框只能输入数字
键盘下落事件实现输入框只能输入数字: <script type="text/javascript"> // 实现输入框只能输入数字 function ValidateN ...
- mysql转换类型
今天遇到一个问题,那就是当时一个项目设计表的时候,把时间以20160101123596这样的形式,以varchar存到了数据库里. 今天要写一条sql,查询一个报表,条件就是要过滤这个时间,但是var ...
- HTML特殊符号汇总
较常用的飘黄处理了 ´ ´ © © > > µ µ ® ® & & ° ° ¡ ¡ » » ¦ ¦ ÷ ÷ ¿ ¿ ¬ ¬ § § • • ½ ½ « « ¶ ¶ ¨ ...
- WPF语音播放MediaPlayer
private MediaPlayer player; public MainWindow() { InitializeComponent(); player = new MediaPlayer(); ...
- .Net语言 APP开发平台——Smobiler学习日志:实现在手机上调用摄像头进行扫描
最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 样式一 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的&qu ...
- Devexpress WPF Theme Editor 01
在Devexpress中,已经有内置了很多主题样式.一般我们开发就已经够用了.但是随着客户的需求提高..我们要自己手动写一些样式这些的, 那么Devexpress 已经提供一个专门这样的工具. 下载地 ...
- 改进uwsgi启动脚本,使其支持多个独立配置文件
最近在研究flask,在架设运行环境的时候犯了难.因为我想把每个独立的应用像NGINX处理多个网站那样,每个应用单独一个配置文件.而网上流传的uwsgi启动脚本都只支持单个配置文件.虽然有文章说可以把 ...