博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]C# 中使用委托对List<>进行排序和筛选
阅读量:6911 次
发布时间:2019-06-27

本文共 2977 字,大约阅读时间需要 9 分钟。

一、使用委托对List<>进行排序

现有类A,含三个属性,分别是NO,AGE,NAME,现在要求按照这个顺序排序(既先比较NO,如果相同比较AGE,如果AGE相同就比较NAME)。

类A的代码:

1: class A
2: {
3:     private string _name;
4:     public string NAME
5:     {
6:         get { return _name; }
7:         set { _name = value; }
8:     }
9: 
10:     private int _age;
11:     public int AGE
12:     {
13:         get { return _age; }
14:         set { _age = value; }
15:     }
16: 
17:     private int _no;
18:     public int NO
19:     {
20:         get { return _no; }
21:         set { _no = value; }
22:     }
23: 
24:     public A(int no, int age, string name)
25:     {
26:         this.NO = no;
27:         this.AGE = age;
28:         this.NAME = name;
29:     }
30: }

构造相应对象,对其进行排序测试:

1: static void Main(string[] args)
2: {
3:     //构造数据
4:     List list = new List();
5:     list.Add(new A(20, 20, "00001"));
6:     list.Add(new A(18, 50, "00003"));
7:     list.Add(new A(20, 19, "00004"));
8:     list.Add(new A(21, 21, "00005"));
9:     list.Add(new A(19, 19, "00006"));
10:     list.Add(new A(99, 19, "00007"));
11:     list.Add(new A(19, 19, "00008"));
12:     list.Add(new A(38, 50, "00009"));
13: 
14:     //进行排序
15:     list.Sort(delegate(A a1, A a2)
16:     {
17:         if (a1.NO.CompareTo(a2.NO) != 0)
18:             return a1.NO.CompareTo(a2.NO);
19:         else if (a1.AGE.CompareTo(a2.AGE) != 0)
20:             return a1.AGE.CompareTo(a2.AGE);
21:         else
22:             return a1.NAME.CompareTo(a2.NAME);
23:     });
24: 
25:     //打印输出
26:     foreach (A a in list)
27:     {
28:         Console.WriteLine(a.NO + " " + a.AGE + " " + a.NAME);
29:     }
30: 
31:     Console.ReadLine();
32: }

 

其实这是用委托表示的方法对 List 的元素进行排序。内部实现则为QuickSort 算法。

详情可参考:

原文地址:

 

 

二、使用委托对List<>进行筛选

C#里 List 筛选是很简单的事情,不用自已写循环去遍历,利用.net的特性 list.FindAll 可以很方便的实现。

1: /// 
2: /// 根据匹配条件获得子列表
3: /// 
4: /// 
5: /// 
6: private List
selectList(List
list)
7: {
8:     string name = txtName.Text.Trim();
9:     string nation = txtNation.Text.Trim();
10: 
11:     return list.FindAll(delegate(BaseInfo info)
12:     {
13:         if ((string.IsNullOrEmpty(name) || info.Name.IndexOf(name) != -1) && (string.IsNullOrEmpty(nation) || info.Nation.IndexOf(nation) != -1))
14:         {
15:             return true;
16:         }
17:         else
18:         {
19:             return false;
20:         }
21:     });
22: }

 

1: /// 
2: /// 从列表中获得分页数据
3: /// 
4: /// 
5: /// 
6: /// 
7: /// 
8: private List
getPageData(List
list, int pageIndex, int pageSize)
9: {
10:     return list.FindAll(delegate(BaseInfo info)
11:     {
12:         int index = list.IndexOf(info);
13:         if (index >= (pageIndex - 1) * pageSize && index < pageIndex * pageSize)
14:         {
15:             return true;
16:         }
17:         else
18:         {
19:             return false;
20:         }
21:     });
22: }

原文地址:

转载于:https://www.cnblogs.com/chaosimple/archive/2013/05/04/3059401.html

你可能感兴趣的文章
C++除零异常
查看>>
css的兼容问题汇总
查看>>
android apk 防止反编译技术第五篇-完整性校验(转)
查看>>
ios优秀开发者笔记汇总
查看>>
CSS 异步加载技术 不影响页面渲染
查看>>
我的友情链接
查看>>
angular学习资源
查看>>
我的友情链接
查看>>
js 正则表达式中/i,/g,/ig,/gi,/m(模式修正符)的区别和含义
查看>>
Python [3] optparse、sys、hashlib模块
查看>>
等待事件之Log File Sync
查看>>
DML并行度限制
查看>>
python mix-in
查看>>
限定user_agent -apache
查看>>
oracle的启动和关闭
查看>>
Docker 基础技术:Linux Namespace(下)
查看>>
VMwareWorkstation 15 木有響應 我勒個去……硬盤智障?
查看>>
选择那件让你感到痛苦的事情,你就能超越自我
查看>>
如何用好 Google 等搜索引擎
查看>>
【QQ和新浪微博登陆第三方的简单实现】
查看>>