NET泛型List<T>实现快速排序、查找功能 - - 转
2012-09-04 09:59
183 查看
.NET中的List<T>非常方便,但是很遗憾得是没有自带更方便的一些排序、查找函数。比如说,Sort()和Find()方法都包含在List<T>里,但果你想使用,你得自己写函数。这往往会让我们感到不爽。本文告诉你,其实这些Sort() Find()方法想要的都只是一个一句话delegate而已。 声明:本文讨论非LINQ的方法,适用于.NET2.0以上平台。
主要讨论以下三个方法:List<T>.Sort() 、List<T>.Find() 、List<T>.Exist()
1、我们先看List<T>.Sort()。其定义是:public
void Sort( Comparison<T> comparison )
其要求传入的参数是Comparison<T> comparison。那我们看看Comparison<T>
comparison 要求我们传入哪些参数、返回什么样的值。
查阅MSDN后,我们发现Comparison<T> 要求我们传入两个T的示例,即t1和t2;返回结果是整数,如果t1<t2返回-1,如果相等返回-,如果t1>t2返回1,和字符串比较的返回方式一样。
于是我们可以这样设计delegate:
listVideoItems.Sort(delegate(VideoItem v1, VideoItem
v2) { return Comparer<string>.Default.Compare(v1.Title, v2.Title);
});
上面的代码是对实体的Title属性进行排序,采用字符串比较的返回值作为delegate的返回值,呵呵,很简单很巧妙吧? o(∩_∩)o
2、接下来我们看看List<T>.Find()和List<T>.Exist()
Find()的定义如下:
public T Find( Predicate<T>
match )
Exist也类似:
public bool Exists(
Predicate<T> match )
看出来了吧?呵呵,只要我们设计好Predicate<T> match
这个参数的delegate,Find()和Exists()这两个函数我们都可以用了。
查询MSDN发现,Predicate<T>
要求我们传入一个T的实体,并返回这个T是不是存在的布尔结果。
非常简单得我们就可以写出:
VideoItem video=
listVideoItems.Find(delegate(VideoItem v) { return v.Title== "xxxxx";
})
以上代码表示按照标题查找实体,当然"xxxxx"你可以替换成别的,变量和硬代码都可。v.Title == "xxxxx" 这种方式也可以改为 v.Minutes > 25 或其他,只要能返回布尔结果即可。
同样的delegate也可以用在Exists()中:
bool flag= listVideoItems.Exists(delegate(VideoItem
v) { return v.Minutes > 25 ;})
最后,List<T>当中还有一个非常好用的FindAll()方法,也相当好用,相信看完本文的朋友马上就能写出delegate来。o(∩_∩)o。
主要讨论以下三个方法:List<T>.Sort() 、List<T>.Find() 、List<T>.Exist()
1、我们先看List<T>.Sort()。其定义是:public
void Sort( Comparison<T> comparison )
其要求传入的参数是Comparison<T> comparison。那我们看看Comparison<T>
comparison 要求我们传入哪些参数、返回什么样的值。
查阅MSDN后,我们发现Comparison<T> 要求我们传入两个T的示例,即t1和t2;返回结果是整数,如果t1<t2返回-1,如果相等返回-,如果t1>t2返回1,和字符串比较的返回方式一样。
于是我们可以这样设计delegate:
listVideoItems.Sort(delegate(VideoItem v1, VideoItem
v2) { return Comparer<string>.Default.Compare(v1.Title, v2.Title);
});
上面的代码是对实体的Title属性进行排序,采用字符串比较的返回值作为delegate的返回值,呵呵,很简单很巧妙吧? o(∩_∩)o
2、接下来我们看看List<T>.Find()和List<T>.Exist()
Find()的定义如下:
public T Find( Predicate<T>
match )
Exist也类似:
public bool Exists(
Predicate<T> match )
看出来了吧?呵呵,只要我们设计好Predicate<T> match
这个参数的delegate,Find()和Exists()这两个函数我们都可以用了。
查询MSDN发现,Predicate<T>
要求我们传入一个T的实体,并返回这个T是不是存在的布尔结果。
非常简单得我们就可以写出:
VideoItem video=
listVideoItems.Find(delegate(VideoItem v) { return v.Title== "xxxxx";
})
以上代码表示按照标题查找实体,当然"xxxxx"你可以替换成别的,变量和硬代码都可。v.Title == "xxxxx" 这种方式也可以改为 v.Minutes > 25 或其他,只要能返回布尔结果即可。
同样的delegate也可以用在Exists()中:
bool flag= listVideoItems.Exists(delegate(VideoItem
v) { return v.Minutes > 25 ;})
最后,List<T>当中还有一个非常好用的FindAll()方法,也相当好用,相信看完本文的朋友马上就能写出delegate来。o(∩_∩)o。
相关文章推荐
- .NET泛型List实现快速排序、查找功能
- C#中的delegate以及利用List<T>中delegate快速实现排序、查找
- List<T>采用delegate快速实现排序、查找等操作
- 直接查找排序,归并排序,快速排序,计数排序 ,堆排 C++实现
- List<T>采用delegate快速实现排序、查找等操作
- 归并排序、插入排序、快速排序、二分查找的c++实现
- 基本算法简单实现-二分法查找、合并排序、冒泡排序、插入排序、选择排序、快速排序
- [Android开发] 在项目中快速实现 列表字母排序滑动索引 功能原理以及过程代码
- List<T>采用delegate快速实现排序、查找等操作
- 如何在App中实现IM功能之七快速实现聊天列表排序模块——箭扣科技Arrownock
- 剑指offer--快速排序递归实现,年龄排序O(N)实现,旋转数组最小值查找
- List<T>采用delegate快速实现排序、查找等操作
- Word查找替换功能之快速实现行尾批量加句号
- List 采用delegate快速实现排序、查找等操作
- 数据结构之二分法查找、快速排序思想与实现
- 设计一个学生成绩管理系统,实现对学生成绩的动态管理,实现对学生成绩的输入,显示,删除,查找,插入,最佳,保存,计算,排序等主要功能
- 如何在App中实现IM功能之七快速实现聊天列表排序模块——箭扣科技Arrownock
- 数据结构之二分法查找、快速排序思想与实现
- List<T> 排序(Sort)查找(Find)功能的多种实现
- java实现单链表的初始化,创建,删除,插入,查找,排序,同项删除,退出等功能