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
    转载请保留此信息。
  • 相关阅读:
    windows下的mysql备份恢复命令
    sp_addlinkedserver的使用方法 (转)
    一个以pubs数据库为例的SQL SERVER数据库全文索引
    【C#】可空类型(Nullable)
    【C#】 异常处理
    【电脑常识】如何查看电脑是32位(X86)还是64位(X64),如何知道硬件是否支持64位系统
    【C#】委托Delegate
    【工具】VS2010常用调试技巧(1)
    实验1 总结
    用C语言编程自动生成四则运算
  • 原文地址:https://www.cnblogs.com/junqilian/p/1271203.html
Copyright © 2011-2022 走看看