• List<T>采用delegate快速实现排序、查找等操作


          .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。

            本文欢迎转载。转载时敬请自重,体现出您和贵网站的素质,以超链接方式著名来源-博客园,流牛木马。非常感谢。

     1
    1
    1
    1
     
  • 相关阅读:
    如何把数字字符'1'转换为整数(java 实现)
    栈之括号匹配问题(java实现)
    Python之匿名函数(filter,map,reduce)
    python之选择排序
    python之插入排序
    python之数组元素去重
    Java中如何获取多维数组的长度
    ASP.NET 页生命周期概述
    项目中Ajax调用ashx页面中的Function的实战
    Jquery Ajax处理,服务端三种页面aspx,ashx,asmx的比较
  • 原文地址:https://www.cnblogs.com/azure/p/ASP_NET_LIST_SORT_FIND_DELEGATE.html
Copyright © 2020-2023  润新知