• 为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
    转载请保留此信息。
  • 相关阅读:
    Oozie时bin/oozied.sh start或bin/oozied.sh run出现Bootstrap进程无法启动,http://bigdatamaster:11000/oozie界面也无法打开?
    [ACM] POJ 2253 Frogger (最短路径变形,每条通路中的最长边的最小值)
    Echoprint系列--Android编译与调用
    shell编程之文本与日志过滤
    C++中搜索、截取字符串
    Swift中的UIKit重力学
    hbase0.96 put流程 源码分析
    [Docker]初次接触
    工作日志2014-08-25
    Flex和Servlet结合上传文件报错(二)
  • 原文地址:https://www.cnblogs.com/junqilian/p/1271203.html
Copyright © 2020-2023  润新知