IComparable 接口含int CompareTo(object obj)方法
IComparable在 using System;命名空间
Array.Sort(array)排序方法:
Sort方法内部是数组 [ ] 实现的IComparable接口,并且重写的int CompareTo(object obj)方法
注:基本类型int\double\float \long 等都实现了IComparable接口的int CompareTo(object obj)方法
源码:
namespace System{
//1.当前实例与同一个类型的另一对象进行比较
//2.参数obj 进行比较的对象
//3.返回值(int类型):
// 值小于零---obj之前
// 值等于零---等于obj
// 值大于零---obj之后
//4.异常:System.ArgumentExpection (比较的两个实例不是同一个类型)
//当调用方法并且传递的自变量中至少有一个参数不符合所调用方法的参数规范
public interface IComparable
{
int CompareTo(object obj);
}
}
public class Test
{
public static void Main()
{
//初始化books元素
Book[] books = new Book[3]
{
new Book(){Name="C#",Price = 80.6},
new Book(){Name="C++",Price = 75.6},
new Book(){Name="C",Price = 60.5}
};
//数组排序方法sort()
Array.Sort(books);
// 遍历books
foreach(var i in books)
{
Console.WriteLine(i.Name+"---"+i.Price);
}
Console.WriteLine("END");
}
}
public class Book:IComparable
{
public string Name{get;set;}
public double Price{get;set;}
public int CompareTo(object obj)
{
//类型转换
Book parameter = obj as Book;
//和上面的CompareTo方法不同,这个是double类型的。
return this.Price.CompareTo(parameter.Price);
}
}
运行结果:
C---60.5
C++---75.6
C#---80.6
END
---------------------------------------------------------------------------------------------------------------------------------
IComparer<T> 含 int Compare(object obj1 object obj2)方法
IComparer<T>在 using System.Collections.Generic; 命名空间。
Array.Sort(array,new BookComparer()) 排序方法:
using System;
using System.Collections.Generic;
public class Test
{
public static void Main()
{
Book[] books = new Book[3]
{
new Book(){Name="C#",Price = 80.6},
new Book(){Name="C++",Price = 75.6},
new Book(){Name="C",Price = 60.5}
};
Array.Sort(books,new BookComparer());
foreach(var i in books)
{
Console.WriteLine(i.Name+"---"+i.Price);
}
Console.WriteLine("END");
}
}
public class Book
{
public string Name{get;set;}
public double Price{get;set;}
}
public class BookComparer:IComparer<Book>
{
public int Compare(Book bNum1,Book bNum2)
{
return bNum1.Price.CompareTo(bNum2.Price);
}
}
运行结果:
C---60.5
C++---75.6
C#---80.6
END
------------------------------------------------------------------------------------------------------------------
IComparer 含 int Compare(object obj1 object obj2)方法
IComparer在 using System.Collections; 命名空间。
Array.Sort(array,new PriceComparer()) 排序方法:
using System;
using System.Collections;
public class Test
{
public static void Main()
{
Book[] books = new Book[3]
{
new Book(){Name="C#",Price = 80.6},
new Book(){Name="C++",Price = 75.6},
new Book(){Name="C",Price = 60.5}
};
Array.Sort(books,new PriceComparer());
foreach(var i in books)
{
Console.WriteLine(i.Name+"---"+i.Price);
}
Console.WriteLine("END");
}
}
public class Book
{
public string Name{get;set;}
public double Price{get;set;}
}
public class PriceComparer : IComparer
{
public int Compare(object obj1, object obj2)
{
Book Book1 = obj1 as Book;
Book Book2 = obj2 as Book;
if (Book1 == null || Book2 == null)
{
throw new ArgumentException("类型错误");
}
return Book1.Price.CompareTo(Book2.Price);
}
}
运行结果:
C---60.5
C++---75.6
C#---80.6
END