C#中SortedList类的使用

C#中SortedList类

命名空间:System.Collections

程序集:mscorlib(在mscorlib.dll中)

语法:public class SortedList : IDictionary, ICollection, IEnumerable, ICloneable

构造函数:

1. SortedList()

初始化 SortedList 类的新实例。该实例为空、具有默认初始容量并依据 IComparable 接口(此接口由加入到 SortedList 中的每一个键实现)进行排序

例:

SortedList mySL1 = new SortedList();

2. SortedList (IComparer)

初始化 SortedList 类的新实例,该实例为空、具有默认初始容量并依据指定的 IComparer 接口进行排序。
依据指定的 IComparer 实现对元素进行排序。

假设 comparer 为 空引用(在 Visual Basic 中为 Nothing),则会使用每一个键的 IComparable 实现。因此,每一个键必须实现 IComparable 接口,以便可以与 SortedList 中的其它每一个键进行比較。

SortedList 的容量是 SortedList 能够保存的元素数。向 SortedList 加入元素时,将通过又一次分配内部数组,依据须要自己主动增大容量。
假设能够预计集合的大小。那么当指定初始容量后,将无需在向 SortedList 中加入元素时运行大量的大小调整操作。
此构造函数的运算复杂度为 O(1)。

例:

SortedList mySL2 = new SortedList(new CaseInsensitiveComparer());

3. SortedList (IDictionary)

初始化 SortedList 类的新实例,该实例包括从指定字典复制的元素、具有与所复制的元素数同样的初始容量并依据由每一个键实现的 IComparable 接口排序。

每一个键必须实现 IComparable 接口。以便可以与 SortedList 中其它每一个键进行比較。

依据加入到 SortedList 的每一个键的 IComparable 实现对元素进行排序。

Hashtable 是能够传递到此构造函数的 IDictionary 实现的一个演示样例。新 SortedList 包括存储在 Hashtable 中的键和值的副本。
SortedList 的容量是 SortedList 能够保存的元素数。向 SortedList 加入元素时,将通过又一次分配内部数组,依据须要自己主动增大容量。

假设能够预计集合的大小。那么当指定初始容量后,将无需在向 SortedList 中加入元素时运行大量的大小调整操作。

此构造函数的运算复杂度为 O(n),当中 n 是 d 中的元素数。
例:

Hashtable myHT = new Hashtable();

myHT.Add("FIRST", "Hello");

myHT.Add("SECOND", "World");

myHT.Add("THIRD", "!");

// Create a SortedList using the default comparer.

SortedList mySL3 = new SortedList(myHT);

4. SortedList (Int32)

初始化 SortedList 类的新实例,该实例为空、具有指定的初始容量并依据 IComparable 接口(此接口由加入到 SortedList 中的每一个键实现)进行排序。

例:

SortedList mySL4 = new SortedList( 3 );

Console.WriteLine("mySL1 (default):");

mySL4.Add("FIRST", "Hello");

mySL4.Add("SECOND", "World");

mySL4.Add("THIRD", "!");

5. SortedList (IComparer, Int32)

初始化 SortedList 类的新实例,该实例为空、具有指定的初始容量并依据指定的 IComparer 接口排序。

例:

SortedList mySL5 = new SortedList(new CaseInsensitiveComparer(), 3);

Console.WriteLine("mySL2 (case-insensitive comparer):");

mySL5.Add("FIRST", "Hello");

mySL5.Add("SECOND", "World");

mySL5.Add("THIRD", "!");

6. SortedList (IDictionary, IComparer)

初始化 SortedList 类的新实例。该实例包括从指定字典复制的元素、具有与所复制的元素数同样的初始容量并依据指定的 IComparer 接口排序。

例:

Hashtable myHT = new Hashtable();

myHT.Add("FIRST", "Hello");

myHT.Add("SECOND", "World");

myHT.Add("THIRD", "!");

SortedList mySL6 = new SortedList(myHT, new CaseInsensitiveComparer());

方法:

1. 加入元素

SortedList mySL = new SortedList();

mySL.Add( "one", "The" );

mySL.Add( "two", "quick" );

mySL.Add( "three", "brown" );

mySL.Add( "four", "fox" );

此时,mySL.Count = 4, mySL.Capacity = 16

2. 清空元素

mySL.Clear();

此时,mySL.Count = 0, mySL.Capacity = 16;

3. 是否包括特定键(ContainsKey)、特定值(ContainsValue)

SortedList mySL = new SortedList();

mySL.Add( 2, "two" );

mySL.Add( 4, "four" );

mySL.Add( 1, "one" );

mySL.Add( 3, "three" );

mySL.Add( 0, "zero" );

int myKey = 2;

bool F1 = mySL.ContainsKey( myKey );

String myValue = "three";

bool F2 = mySL.ContainsValue( myValue );

此时F1为ture,F2为true

4. 获取键(GetByIndex)、值(GetKey)

SortedList mySL = new SortedList();

mySL.Add( 1.3, "fox" );

mySL.Add( 1.4, "jumped" );

mySL.Add( 1.5, "over" );

mySL.Add( 1.2, "brown" );

mySL.Add( 1.1, "quick" );

mySL.Add( 1.0, "The" );

mySL.Add( 1.6, "the" );

mySL.Add( 1.8, "dog" );

mySL.Add( 1.7, "lazy" );

int myIndex=3;

Console.WriteLine( "The key at index {0} is {1}.", myIndex, mySL.GetKey( myIndex ) );

Console.WriteLine( "The value at index {0} is {1}.", myIndex, mySL.GetByIndex( myIndex ) );

此时The key at index 3 is 1.3. The value at index 3 is fox.

*************************************************************************************************

备注

SortedList 元素可通过其键来訪问 (如随意 IDictionary 实现中的元素)。或通过其索引来訪问(如随意 IList 实现中的元素)。

SortedList 在内部维护两个数组以存储列表中的元素;即,一个数组用于键,还有一个数组用于相关联的值。

每一个元素都是一个可作为 DictionaryEntry 对象进行訪问的键/值对。键不能为 空引用(在 Visual Basic 中为 Nothing)。但值能够。
SortedList 的容量是 SortedList 能够保存的元素数。

SortedList 的默认初始容量为 0。

随着元素加入到 SortedList 中,在须要时能够通过又一次分配自己主动添加容量。

可通过调用 TrimToSize 或通过显式设置 Capacity 属性降低容量。

SortedList 的元素将依照特定的 IComparer 实现(在创建 SortedList 时指定)或依照键本身提供的 IComparable 实现并根据键来进行排序。

不论在哪种情况下,SortedList 都不同意反复键。

索引顺序基于排序顺序。

当加入元素时,元素将按正确的排序顺序插入 SortedList。同一时候索引会对应地进行调整。当移除元素时。索引也会对应地进行调整。因此,当在 SortedList 中加入或移除元素时。特定键/值对的索引可能会更改。

因为要进行排序。所以在 SortedList 上操作比在 Hashtable 上操作要慢。可是。SortedList 同意通过相关联键或通过索引对值进行訪问,可提供更大的灵活性。 可使用一个整数索引訪问此集合中的元素。

此集合中的索引从零開始。

C# 语言中的 foreach 语句(在 Visual Basic 中为 for each)须要集合中每一个元素的类型。

因为 SortedList 的每一个元素都是一个键/值对,因此元素类型既不是键的类型,也不是值的类型。而是 DictionaryEntry 类型。

时间: 2024-10-16 11:14:39

C#中SortedList类的使用的相关文章

C#常用的集合类型(ArrayList类、Stack类、Queue类、Hashtable类、SortedList类)

1.ArrayList类 ArrayList类主要用于对一个数组中的元素进行各种处理.在ArrayList中主要使用Add.Remove.RemoveAt.Insert四个方法对栈进行操作.Add方法用于将对象添加到 ArrayList 的结尾处:Remove方法用于从 ArrayList 中移除特定对象的第一个匹配项:RemoveAt方法用于移除 ArrayList 的指定索引处的元素:Insert方法用于将元素插入 ArrayList 的指定索引处. 示例 ArrayList的使用 示例将介

C++中的类

摘要:在看Qt时,其中:在.cpp的文件(是类的源文件)---实现槽,在.h的文件中声明槽.  于是打算在这篇随笔中尽可能多的通学C++语言中的类. -------------------------------------------------------------------------------------------------- 一. 在<C/C++程序设计> 吴国凤.吴善立主编中10.3节的---类与对象 1.类和对象的定义 1) 类的声明 实际上类是一种新的数据类型. 它是

静态方法中访问类的实例成员

public class StaticShiLi { static int i=1; int j=2; static void m(){ System.out.println(j);报错 } public static void main(String[] args) { // TODO Auto-generated method stub } } 程序报错,显示无法访问. 疑问:那么怎样在静态方法中访问类的实例成员呢?

Object-C中Category类体验

Object-C开发的时候有的时候会用到Category类,类似于Java和C#中扩展类,就是如果你觉得如果你觉得常用的方法在String中没有,可以根据业务需求和个人喜好写一个扩展类,然后在其中补充自己的方法,如果单纯的扩展已有类型来看基本上是一样的.OC还有可以对已经存在类通过Category进行扩展,这个特点又和C#中的partial class有的类似,先来看下是如何操作的吧: 新建的时候选择Object-C File: 选择类型为Category,第一个是是Categroy名称,第三个

C++中的类所占内存空间总结

C++中的类所占内存空间总结 最近在复习c++的一些基础,感觉这篇文章很不错,转载来,大家看看! 类所占内存的大小是由成员变量(静态变量除外)决定的,成员函数(这是笼统的说,后面会细说)是不计算在内的. 摘抄部分: 成员函数还是以一般的函数一样的存在.a.fun()是通过fun(a.this)来调用的.所谓成员函数只是在名义上是类里的.其实成员函数的大小不在类的对象里面,同一个类的多个对象共享函数代码.而我们访问类的成员函数是通过类里面的一个指针实现,而这个指针指向的是一个table,table

ASP.NET中GUID类

GUID(Global unique identifier)全局唯一标识符,它是由网卡上的标识数字(每个网卡都有唯一的标识号)以及 CPU 时钟的唯一数字生成的的一个 16 字节的二进制值. GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字.例如:6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的 GUID 值. 世界上的任何两台计算机都不会生成重复的

文件中的类都不能进行设计,因此未能为该文件显示设计器 VS2008(Visual Studio 2008) x64

项目属性 运行平台x64 Form2 继承 Form1 , Form2 设计器 报错 64位dll  无法加载 DLL 找不到指定的模块 原因Vs2008(Visual Studio 2008)默认 没安装64编译器 安装参照:<http://blog.csdn.net/clever101/article/details/8844314> 安装sp1补丁会报这个, 安装目录:D:\Program Files (x86)\Microsoft Visual Studio 9.0\Microsoft

Android技术18:Android中Adapter类详解

1.Adapter设计模式 Android中adapter接口有很多种实现,例如,ArrayAdapter,BaseAdapter,CursorAdapter,SimpleAdapter,SimpleCursorAdapter等,他们分别对应不同的数据源.例如,ArrayAdater对应List和数组数据源,而CursorAdapter对应Cursor对象(一般从数据库中获取的记录集).这些Adapter都需要getView方法返回当前列表项显示的View对象.当Model发生改变时,会调用Ba

CSS中伪类及伪元素用法详解

原文:CSS中伪类及伪元素用法详解 伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的读者可以自己尝试: :active  大致效果为用鼠标点击时,元素增加特效,鼠标松开时,特效消失.多用在按钮的点击上. 写法: 这里id为box的是一div块,在css中首先设置了他的基本样式,下面为加入:active伪类后需要修改的样式. 未点击时: 点击之后: :active.:hover.: