`

如何让.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 发表评论
分享到:
评论

相关推荐

    .NET中可用文化的排序列表

    本文将深入探讨如何获取.NET中可用文化的排序列表,并介绍与之相关的编程知识。 首先,我们需要理解什么是`CultureInfo`类。在.NET中,`System.Globalization.CultureInfo`是表示文化特性的核心类。这个类提供了...

    .NET下Redis入门演示

    Redis支持五种主要的数据类型:字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。字符串是最基本的类型,可以存储简单的键值对;哈希则用于存储键值对的集合,类似于JSON对象;...

    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 ...

    .net Framwork 复习试题与笔记

    - `SortedList`:排序的键值对集合。 - `BitArray`:位集合。 - `Queue`:先进先出队列。 - `Stack`:后进先出栈。 - **泛型集合类**: - `List&lt;T&gt;`:动态数组,类型安全。 - `Dictionary, TValue&gt;`:键值对...

    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)

    RedisDB封装库

    - **类型安全**: 提供强类型的操作,减少了类型转换的错误可能。 在实际使用RedisDB封装库时,开发人员可以通过调用相应的接口,如`RedisHelp.StringSet`、`RedisHelp.ListPush`等,轻松地完成对Redis的操作,而...

    C#集合的概念

    泛型是.NET Framework 2.0引入的一个重要特性,它允许在集合类中定义类型参数,从而创建强类型的集合。System.Collections.Generic命名空间包含了泛型版本的集合,如List、Dictionary, TValue&gt;、HashSet等。这些泛型...

    Linq基础学习资料,通俗易懂

    `SortedList`同样是一个键值对集合,但它会自动按照键的顺序排序。 ##### 3.5 SortedList,TValue&gt; `SortedList,TValue&gt;`是泛型版本的`SortedList`,提供了类型安全性和更好的性能。 ##### 3.6 Queue `Queue&lt;T&gt;`是...

    C#数据结构C#数据结构

    - **.NET框架中的排序和查找**: 如SortedList、BinarySearch等方法。 #### 四、本书特色 **1. 结合.NET Framework** - 书中详细介绍如何利用.NET Framework中的集合类和算法来实现高效的数据处理。 - 演示如何...

    List 里面各种关于Linq用法总结

    List是.NET中最常用的动态数组,而LINQ可以方便地对这些列表进行过滤、排序、分组等操作。 3. **LINQ查询表达式** LINQ查询表达式采用类似SQL的语法,使得查询代码直观易懂。例如: ```csharp List&lt;int&gt; numbers...

Global site tag (gtag.js) - Google Analytics