List<T>的Sort()方法,传入Comparison<T>比较器

摘要:
首先,让我们看看Comparison<T>的定义:namespaceSystem{//summary://means比较同一类型的两个对象的方法。publicdelegateintComparison<T>;}我们知道这是一个委托,委托的返回类型是int。然后我们可以实现自己的比较方法。以C1FlexGrid控件的Row对象比较为例。首先,编写比较规则://////Row对象的Comparer//////////privateintCompareRow{if{return0;}否则{return-1;}}否则{if{return1;}否则{stringsTemp1=row1[4]==null?“”:row2[4]。ToString();如果{return1;}如果{return-1;}intrtval=字符串。比较returnretval;}}注1:Row1[4]获取用户手动输入的排序字符串,例如1,2,3,4或a、b、c、d等,也可以为空。注2:当row1[4]为空时,默认排序是call://Get用户在列表list<Row>rows=GetMuchRows()//排序行中选中的所有行。按照设置的排序顺序排序;

首先,看一下 Comparison<T> 的定义:

namespace System
{
    // 摘要:
    //     表示比较同一类型的两个对象的方法。
    //
    // 参数:
    //   x:
    //     要比较的第一个对象。
    //
    //   y:
    //     要比较的第二个对象。
    //
    // 类型参数:
    //   T:
    //     要比较的对象的类型。
    //
    // 返回结果:
    //     值 条件 小于 0 x 小于 y。0 x 等于 y。大于 0 x 大于 y。
    public delegate int Comparison<T>(T x, T y);
}

我们得知这是一个委托,委托的返回类型是int,接着我们可以实现自己的比较方法了.以我在工作中曾写过的一段关于 C1.Win.C1FlexGrid 控件的 Row 对象比较为例,首先写出比较的规则:

/// <summary>
/// Row对象的比较器
/// </summary>
/// <param name="row1"></param>
/// <param name="row2"></param>
/// <returns></returns>
private int CompareRow(Row row1, Row row2)
{
    if (row1 == null)
    {
        if (row2 == null)
        {
            return 0;
        }
        else
        {
            return -1;
        }
    }
    else
    {
        if (row2 == null)
        {
            return 1;
        }
        else
        {
            string sTemp1 = row1[4] == null ? "" : row1[4].ToString();
            string sTemp2 = row2[4] == null ? "" : row2[4].ToString();
            if (sTemp1.Length == 0)
            {
                return 1;
            }
            if (sTemp2.Length == 0)
            {
                return -1;
            }
            int retval = String.Compare(sTemp1, sTemp2);
            return retval;
        }
    }
}

注1: row1[4] 获取的是用户手动输入的排序字符串,如1,2,3,4 或 a,b,c,d 等等,也可为空.

注2: 当row1[4]为空时,默认排序靠后.

调用处的代码块:

// 获取列表中用户勾选的所有行
List<Row> rows = GetMuchRows();
// 按设定的排列顺序进行排序
rows.Sort(CompareRow);

免责声明:文章转载自《List&amp;lt;T&amp;gt;的Sort()方法,传入Comparison&amp;lt;T&amp;gt;比较器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇loadrunner参数化总结一种基于Python Pika库的RabbitMQ Client简单封装下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

利用Python进行数据分析-Pandas(第五部分-数据规整:聚合、合并和重塑)

  在许多应用中,数据可能分散在许多文件或数据库中,存储的形式也不利于分析。本部分关注可以聚合、合并、重塑数据的方法。 1、层次化索引   层次化索引(hierarchical indexing)是pandas的一项重要功能,它使你能在一个轴上拥有多个(两个以上)索引级别。抽象点说,它使你能以低纬度形式处理高纬度数据。我们来看一个简单的栗子:创建一个Ser...

快排代码

1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 class Solution{ 6 public: 7 void quick_sort(vector<int>& arr, int l, int...

apache 访问日志access_log 配置和解析 rotatelogs分割日志

一、解析访问日志        apache 的访问日志记载着大量的信息,学会高效快捷的读出其中关键信息对我们的工作有极大帮助。       如果Apache的安装方式是默认安装,服务器一运行就会有两个日志文件生成。       这两个文件是 access_log(在Windows上是access.log)                        ...

linux命令 对日志文件的IP出现的次数进行统计 并显示次数最多的前六名

遇到的一个面试题: 对日志文件的IP值次数进行统计 并显示次数最多的前六名 解决方法: grep -i -o -E "([0-9]{1,3}\.){3}[0-9]{1,3}" test1.txt | sort -n | uniq -c | sort -n-r | head -6 参数详情: grep命令 用于文本搜索 -E:用于使用正则匹配 -o:只显示匹...

[Git] git代码统计

copy : https://www.cnblogs.com/liyropt/archive/2012/12/31/2841053.html 命令行 查看git上的个人代码量: git log --author="username" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; lo...

ORACLE 如何查看索引重建进度情况

   在ORACLE数据库中,如果一个比较大的索引在重建过程中耗费时间比较长,那么怎么查看索引重建耗费的时间,以及完成了多少(比例)了呢,我们可以通过V$SESSION_LONGOPS视图来查看索引重建的时间和进度。   官方文档关于V$SESSION_LONGOPS的介绍如下 V$SESSION_LONGOPS This view displays...