zoukankan      html  css  js  c++  java
  • 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
     
  • 相关阅读:
    Java+7入门经典 -1 简介
    优化算法动画演示Alec Radford's animations for optimization algorithms
    如何写科技论文How to write a technical paper
    开始学习深度学习和循环神经网络Some starting points for deep learning and RNNs
    用500行Julia代码开始深度学习之旅 Beginning deep learning with 500 lines of Julia
    用10张图来看机器学习Machine learning in 10 pictures
    ICLR 2013 International Conference on Learning Representations深度学习论文papers
    ICLR 2014 International Conference on Learning Representations深度学习论文papers
    卷积神经网络CNN(Convolutional Neural Networks)没有原理只有实现
    卷积神经网络Convolutional Neural Networks
  • 原文地址:https://www.cnblogs.com/azure/p/ASP_NET_LIST_SORT_FIND_DELEGATE.html
Copyright © 2011-2022 走看看