zoukankan      html  css  js  c++  java
  • List<T> 排序(Sort)查找(Find)功能的多种实现

    记录 List<T>功能中的Sort和Find功能的几种实现方式

    Person类

        public class Person:IComparable<Person>
        {
            
    public string Name { getset; }
            
    public int Age { getset; }
            
    public Person(string name, int age)
            {
                
    this.Name = name;
                
    this.Age = age;
            }

            
    public int CompareTo(Person p)
            {
                
    return this.Age - p.Age;
            }

            
    public static int NameCompareTo(Person p1, Person p2)
            {
                
    return System.Collections.Comparer.Default.Compare(p1.Name, p2.Name);
            }  
        }

     调用类

    List<Person> Persons = new List<Person>() { 
                    
    new Person("jdmin",20),
                    
    new Person("aleax",35),
                    
    new Person("xhina",23)
                };
                
    //排序
                
    //方法 1. 让Person类继承IComparable接口,实现CompareTo方法
                
    //Persons.Sort();
                
    //方法2.自定义一个方法来实现
                Persons.Sort(Person.NameCompareTo);
                
    //Persons.Sort(delegate(Person p1, Person p2) { return Comparer.Default.Compare(p2.Name, p1.Name); });
                foreach (Person p in Persons)
                {
                    Console.WriteLine(p.Name 
    + " Age:" + p.Age);
                }
                Console.WriteLine(
    "------------------------------");
                
    //方法3. 使用Lambada
                
    //"Lambda表达式" 的语法格式:
                
    //参数列 => 语句或语句块
                
    //如果参数列中有0个或1个以上参数,则必须使用括号括住参数列
                var temList = Persons.OrderBy(p => p.Name);//名字升序, A-Z
                
    //var temList = Persons.OrderByDescending(p => p.Age);//按年龄降序
                foreach (Person p in temList)
                {
                    Console.WriteLine(p.Name 
    + " Age:" + p.Age);
                }
                Console.WriteLine(
    "------------------------------");

                
    //查找年龄>25的数据
                
    //查找单个数据
                Person oPerson = Persons.Find(delegate(Person p) { return p.Name == "aleax"; });
                Console.WriteLine(
    "Name: {0}, Age: {1}", oPerson.Name, oPerson.Age);
                
    //查找出满足条件的所有数据
                List<Person> ageList = Persons.FindAll(AgeFind);
                
    //var ageList = Persons.FindAll(delegate(Person p) { return p.Age > 25; });
                
    //var ageList = Persons.Where(p => p.Age > 25);
                foreach (Person p in ageList)
                {
                    Console.WriteLine(p.Name 
    + " Age:" + p.Age);
                }
                Console.WriteLine(
    "------------------------------");
                
    //查看指定的名字是否存在
                var bUserExists=Persons.Exists(delegate(Person p){return p.Name=="aleax";});
                Console.WriteLine(bUserExists);
    点击下载
  • 相关阅读:
    Silverlight & Blend动画设计系列一:偏移动画(TranslateTransform)
    如何在DeepEarth中进行图形绘制(点、线、多边形以及自定义图片图层)
    Bing Maps进阶系列六:使用Silverlight剪切(Clip)特性实现Bing Maps的迷你小地图
    解决 ICTCLAS 2009 Windows_JNI_32 在 Web Project无法使用的方法
    XListControl 改变颜色 行高
    设置 java.library.path其实是在 Apache Tomcat 的任务栏 Icon中设置
    ICTCLAS 2009 JNI_32 遇到MyEclipse Web Project下无法运行
    10分钟开始使用ICTCLAS Java版
    boost regex_search 找出所有 匹配串
    Boost 1_37_0 的安装以及在VC6.0中的使用
  • 原文地址:https://www.cnblogs.com/chinabc/p/2001318.html
Copyright © 2011-2022 走看看