OrderBy排序和IComparer的使用

一,OrderBy排序在MDSN中有两种使用方法,如下

1》第一种方法的使用,就是根据某个字段排序,使用默认的比较器(Comparer<T>.default),如下,由于Dictionary是继承IEnumerable的,所以这里可以使用Dictionary作为排序集合,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Dictionary<string, object> dic = new Dictionary<string, object>();
            dic.Add("B", "2");
            dic.Add("A", "1");
            dic.Add("D", "4");
            dic.Add("C", "3");
            StringBuilder str1 = new StringBuilder();
            var param1 = dic.OrderBy(x => x.Key).ToDictionary(x => x.Key, y => y.Value);
            foreach (string dic1 in param1.Keys)
            {
                str1.Append(dic1+",");
            }
            Console.WriteLine(str1.ToString());
            Console.ReadKey();
        }
    }
}

2》第二种方法的使用,按使用指定的比较器按升序对序列的元素进行排序。如下(使用ASCII值排序的例子介绍)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Dictionary<string, object> dic = new Dictionary<string, object>();
            dic.Add("B", "2");
            dic.Add("A", "1");
            dic.Add("D", "4");
            dic.Add("C", "3");
            StringBuilder str1 = new StringBuilder();
            var param = dic.OrderBy(x => x.Key, new ComparerTest()).ToDictionary(x => x.Key, y => y.Value);
            foreach (string dic1 in param.Keys)
            {
                str1.Append(dic1);
            }
            Console.WriteLine(str1.ToString());
            Console.ReadKey();
        }
    }
    public class ComparerTest : IComparer<String>
    {
        public int Compare(String x, String y)
        {
            return string.CompareOrdinal(x, y);
        }
    }
}

看下面这句的代码,不知道,大家有没有跟我一样的疑惑?如下

var param = dic.OrderBy(x => x.Key, new ComparerTest()).ToDictionary(x => x.Key, y => y.Value);

为什么这句话实例ComparerTest这个类就可以完成比较???

查询一遍第二个方法的源码,如下图

1,原来指定的比较器接收的是IComparer<TKey> comparer类型,而ComparerTest是继承 IComparer<TKey>实现的比较方法。

2,相当于IComparer<String> icomparer = new ComparerTest();(这里是显式转换和隐式,想了解可以看http://www.cnblogs.com/May-day/p/6856457.html),这里实现了IComparer中的Compare方法

3,最后OrderBy调用比较器,即是IComparer中的Compare,排序

原文地址:https://www.cnblogs.com/tsql/p/9098584.html

时间: 2024-10-05 20:51:26

OrderBy排序和IComparer的使用的相关文章

angularjs中是否选择所有和$filter过滤orderBy排序

HTML代码: <table class="table table-bordered table-list table-striped no-margin-bottom"> <thead> <tr> <th>{{'column-name' | translate}}</th> <th width="100">{{'primary-key' | translate}}</th> <

OrderBy排序1,2,0,0,0,0

lambda表达式排序var sql_BusinessInformation = db.BusinessInformation .OrderBy(d => d.sort == 0 ? int.MaxValue : d.sort).ThenByDescending(d => d.createtime) 生成的sql语句 .OrderBy(d => d.sort == 0 ? int.MaxValue : d.sort) 转意为: CASE WHEN (0 = [Extent1].[sort

关于angularjs的orderby排序

包子君又来了,,,angularjs有一个非常强大的功能,那就是排序啦,其实也是算filter的一部分呢,包子刚刚做了一个排序,是按照公司的部门的数字大小排列的 由于后台没传来标识,所以我前台自己截图部门的数字,将他重新放在一个数组里面,然后orderby这个数组就ok啦,最后上图: rsdesa是我截图的数组的顺序,desc代表顺序呢, 希望大家能够共同进步,一起成为一个优秀的前端工程师.嘻嘻~~~~

JOIN,WHERE判断和ORDERBY排序

MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小. 如果重复代码只是相似但不是完全相同,运用 塑造模板函数(Form Template Method) 获得一个 模板方法模式(Template Method) . 与我们所依赖的构件一样,插件也是基于坐标保存在我们的Maven仓库当中的.在用到插件的时候会先从本地仓库查找插件,如果本地仓库没有则从远程仓库查找插件并下

C# IComparable接口、IComparer接口和CompareTo(Object x)方法、Compare()方法

在项目中经常会用到字符串比较,但是有时候对字符串的操作比较多,规则各异.比如有的地方我们需要用排序规则,有的地方需要忽略大小写,我们该如何写一个比较容易操作的比较方法呢?重新实现IComparer接口不失为一个好办法. IComparable.CompareTo 方法 在MSDN上是这么解释(机器翻译过来)的: IComparable接口:定义一种特定于类型的通用比较方法,值类型或类通过实现此方法对其实例进行排序. IComparer接口:公开一种比较两个对象的方法. 详细理解就是: 在默认情况

LINQ 101——约束、投影、排序

什么是LINQ:LINQ 是一组 .NET Framework 扩展模块集合,内含语言集成查询.集合以及转换操作.它使用查询的本机语言语法来扩展 C# 和 Visual Basic,并提供利用这些功能的类库. 什么是LINQ 101:是学习LINQ的不错的资源(下载地址:http://pan.baidu.com/s/1ntE74NJ),当初我也是看LINQ101来熟悉LINQ的.现把我当时的学习笔记整理出来 Restriction (约束)Projection (投影)Ordering (排序)

EF增删改查+使用Expression进行排序分页

注:以下部分来自<ASP.NET MVC 企业级实战>一书的摘抄和改写以及部分个人学习心得. EF简单增删改查 增加 public static int Add() { using (NorthwindEntities db=new NorthwindEntities()) { Customers cs2 = new Customers { CustomerID = "11", ContactName="aa4444sa", Address="

C#排序比较

与C#定义了相等性比较规范一样,C#也定义了排序比较规范,以确定一个对象与另一个对象的先后顺序.排序规范如下 IComparable接口(包括IComparable接口和IComparable<T>接口) >和<运算符 当需要实现排序算法时,使用IComparable接口.在下面的例子中,Array.Sort静态方法可以调用,是因为System.String类实现了IComparable接口. string[] colors={"Green", "Re

dedecms网站文章内容按自定义排序的方法

标签dede:arclist的排序是通过orderby来指定的,如下: {dede:arclist orderby=’排序字段’ }{/dede:arclist} orderby=’sortrank’ 文档排序方式 § orderby=’hot’ 或 orderby=’click’ 表示按点击数排列§ orderby=’sortrank’ 或 orderby=’pubdate’ 按出版时间排列§ orderby=’near’§ orderby==’lastpost’ 按最后评论时间§ order