排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256
50010702506256
欢迎加群交流技术
分类:
.NET
集合提供了Sort,我们可以实现IComparer接口,来实现自定义的对象排序方法:
例如:根据年龄来排序
public class MySort : IComparer<UserInfo>
{
/// <summary>
/// 根据返回值来决定两个对象的大小
/// 如果等于0,表示两个对象相同就按照原序
/// 如果小于0,表示x小于y,前一个对象小于后一个对象
/// 如果大于0,表示x大于y,前一个对象大于后一个对象
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public int Compare(UserInfo x, UserInfo y)
{
if (x.Age > y.Age)
return 10;
else if (x.Age == y.Age)
return 0;
else
{
return -10;
}
}
}根据姓名长度来排序:
class NameSort : IComparer<UserInfo>
{
public int Compare(UserInfo x, UserInfo y)
{
return x.UserName.Length - y.UserName.Length;
}
}使用:
效果如下:
那么我们思考一下,基于接口排序的原理是什么呢?其实很简单就是随便写一个排序算法,然后调用这个接口里边提供的方法即可,根据返回的是正数,负数,还是0即可判断两个对象大小了
实现方法如下:
public static void MyListSort<T>(List<T> numbers, IComparer<T> comparer)
{
//任选一种排序算法,这里选择排序
for (int i = 0; i < numbers.Count - 1; i++)
{
for (int j = i + 1; j < numbers.Count; j++)
{
//只要找到比比较数大交换即可,这里具体的比较逻辑由接口来实现从而实现多态
if (comparer.Compare(numbers[i], numbers[j]) > 0)
{
T temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
}
}
}
}这里具体的比较逻辑由接口来实现从而实现多态,依赖于抽象而不依赖于具体的实现,这种设计方法可以降低耦合性,提高扩展性
使用:
效果就不看了和使用原生的一模一样
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)
评价