排名
                
                
                    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)
评价