zoukankan      html  css  js  c++  java
  • 为collection增加排序功能

    注意到 CollectionBase.InnerList属性,这是一个protected 属性,得到一个包含了CollectionBase中的元素的ArrayList。

    所以可以调用ArrayList.Sort()来实现排序。

    using System;

     

    public class Person {

          public Person(string name, int age) {

                this.Name = name;

                this.Age = age;

          }

          public string Name;

          public int Age;

    }

     

    public class People : System.Collections.CollectionBase {

          public int Add(Person p) {

                return List.Add(p);

          }

     

          public void SortByName() {

                System.Collections.IComparer sorter = new NameSortHelper();

                InnerList.Sort(sorter);

          }

          public void SortByAge() {

                System.Collections.IComparer sorter = new AgeSortHelper();

                InnerList.Sort(sorter);

          }

     

          private class NameSortHelper : System.Collections.IComparer {

                public int Compare(object x, object y) {

                      Person p1 = (Person) x;

                      Person p2 = (Person) y;

                      return p1.Name.CompareTo(p2.Name);

                }

          }

     

          private class AgeSortHelper : System.Collections.IComparer {

                public int Compare(object x, object y) {

                      Person p1 = (Person) x;

                      Person p2 = (Person) y;

                      if(p1.Age > p2.Age)

                            return 1;

                      if(p1.Age < p2.Age)

                            return -1;

                      return 0;

                }

          }

    }

     

     

    class App {

          [STAThread]

          static void Main(string[] args) {

                People people = new People();

                people.Add(new Person("John" , 30));

                people.Add(new Person("Bob" , 20));

                people.Add(new Person("Zeke" , 18));

               

                //people.SortByAge();

                people.SortByName();

     

                foreach(Person p in people) {

                      Console.WriteLine("{0} , {1}", p.Name, p.Age);

                }

          }

    }

     

     

    http://unboxedsolutions.com/sean/archive/2004/08/10/292.aspx

    作者:峻祁连
    邮箱:junqilian@163.com
    出处:http://junqilian.cnblogs.com
    转载请保留此信息。
  • 相关阅读:
    指针类型
    集合类型
    VMware打开虚拟机没反应的解决方案(全面汇总)
    redis主从|哨兵|集群模式
    MYSQL一次千万级连表查询优化
    StackExchange.Redis通用封装类分享
    Redis-五种数据类型解析
    Redis并发问题
    C#委托和事件
    Invoke 和 BeginInvoke 的区别
  • 原文地址:https://www.cnblogs.com/junqilian/p/1271203.html
Copyright © 2011-2022 走看看