`

如何让.NET中的强类型的排序列表SortedList支持重复键

阅读更多

非强类型的SortedList如何支持重复键可以参照Pharaoh在2005年就写的blog:《不排序和可以重复key的SortedList》,强类型的SortedList同非强类型的一样可以支持重复键,并不像MSDN上所说的那样,“In either case, a SortedList does not allow duplicate keys.”。

比较非强类型的SortedList,强类型的SortedList需要综合应用C#泛型,接口,继承以及Singleton设计模式来实现,短短几十行代码还是很有点味道的,下面示例是一个允许DateTime键重复,按照DateTime先后顺序排序的一个事件队列的实现:

 1 internal class CEventListComparer : IComparer<DateTime>
 2 {
 3     static private CEventListComparer mono;
 4     public static CEventListComparer EarlyFirst
 5     {
 6         get
 7         {
 8             if (mono == null)
 9                 mono = new CEventListComparer();
10             return mono;
11         }
12     }
13 
14     #region IComparer
15     public int Compare(DateTime x, DateTime y)
16     {
17         if (x == y)
18             return -1;
19         else if (x < y)
20             return -1;
21         else
22             return 1;
23     }
24     #endregion
25 }
26 
27 internal class CEventList : SortedList<DateTime, IScheduleable>
28 {
29     public CEventList() : base(CEventListComparer.EarlyFirst)
30     {
31     }
32 
33     public IScheduleable PopEarlistSchedule(out DateTime newTime)
34     {
35         IScheduleable ish = null;
36         IEnumerator<KeyValuePair<DateTime, IScheduleable>> getFirst = GetEnumerator();
37         getFirst.MoveNext();
38         newTime = getFirst.Current.Key;
39         ish = getFirst.Current.Value;
40         RemoveAt(0);
41         return ish;
42     }
43 
44     internal void Schedule(DateTime ScheduledTime, IScheduleable ScheduledCall)
45     {
46         Add(ScheduledTime, ScheduledCall);
47     }
48 }

上面的事件队列(CEventList)正是我在编写的离散事件仿真程序的核心数据结构,是生产代码哦



丁丁 2007-02-20 01:57 发表评论
分享到:
评论

相关推荐

    asp.net知识库

    如何判断ArrayList,Hashtable,SortedList 这类对象是否相等 帮助解决网页和JS文件中的中文编码问题的小工具 慎用const关键字 装箱,拆箱以及反射 动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/...

    asp.net技术内幕(1)

    13.5 使用XslTransform类 13.6 使用强类型的DataSet 13.7 小结 &lt;br&gt;第14章 使用ADO.NET创建搜索页面 &lt;br&gt;14.1 使用SQL Server全文搜索 14.1.1 配置Full-Text Search Service 14.1.2 对...

    2.ASP.NET.2.0.高级编程(第4版) [1/7]

    10.5 强类型化的集合 296 10.6 System.Collections.Generics 299 10.6.1 泛型的定义 299 10.6.2 泛型列表 300 10.6.3 泛型字典 302 10.6.4 其他泛型集合 303 10.7 集合从.NET 1.1到.NET 2.0的变化 303 10.8 ...

    ASP.net技术内幕

    13.5 使用XslTransform类 13.6 使用强类型的DataSet 13.7 小结 &lt;br/&gt;第14章 使用ADO.NET创建搜索页面 &lt;br/&gt;14.1 使用SQL Server全文搜索 14.1.1 配置Full-Text Search Service ...

    ASP.NET2.0高级编程(第4版)1/6

    本书全面介绍了ASP.NET各种编程技能和2.0版中的巨大变化,并详细阐述了2.0版中的每个新特性。书中提供了大量的实例,可帮助读者快速掌握如何在.NET平台下开发功能强大的ASP.NET应用程序。本书适合有一些基础的ASP...

    asp.net技术内幕(2)

    13.5 使用XslTransform类 13.6 使用强类型的DataSet 13.7 小结 &lt;br&gt;第14章 使用ADO.NET创建搜索页面 &lt;br&gt;14.1 使用SQL Server全文搜索 14.1.1 配置Full-Text Search Service 14.1.2 对...

    asp.net技术内幕(5)

    13.5 使用XslTransform类 13.6 使用强类型的DataSet 13.7 小结 &lt;br&gt;第14章 使用ADO.NET创建搜索页面 &lt;br&gt;14.1 使用SQL Server全文搜索 14.1.1 配置Full-Text Search Service 14.1.2 对...

    asp.net技术内幕(4)

    13.5 使用XslTransform类 13.6 使用强类型的DataSet 13.7 小结 &lt;br&gt;第14章 使用ADO.NET创建搜索页面 &lt;br&gt;14.1 使用SQL Server全文搜索 14.1.1 配置Full-Text Search Service 14.1.2 对...

    asp.net技术内幕(3)

    13.5 使用XslTransform类 13.6 使用强类型的DataSet 13.7 小结 &lt;br&gt;第14章 使用ADO.NET创建搜索页面 &lt;br&gt;14.1 使用SQL Server全文搜索 14.1.1 配置Full-Text Search Service 14.1.2 对...

    multiplex.js:针对JavaScript的LINQ

    多重 全面的数据结构和LINQ JavaScript库。 什么是多重 Multiplex是JavaScript中.Net LINQ方法的一组数据结构和实现,可... SortedList按键排序的键/值对的集合。 LinkedList双链表。 Queue -对象的先进先出(FIFO)

Global site tag (gtag.js) - Google Analytics