分享
 
 
 

SortedList:asp.net入门笔记(七)

王朝asp·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

SortedList 类

表示键/值对的集合,这些键和值按键排序并可按照键和索引访问。SortedList最合适对一列健/值对 进行排序,在排序时,是对键进行排序,SortedList 是 Hashtable 和 Array 的混合。当使用 Item 索引器属性按照元素的键访问元素时,其行为类似于 Hashtable。当使用 GetByIndex 或 SetByIndex 按照元素的索引访问元素时,其行为类似于 Array。

SortedList 在内部维护两个数组以将数组存储到列表中;即,一个数组用于键,另一个数组用于相关联的值。每个元素都是一个可作为 DictionaryEntry 对象进行访问的键/值对。键不能为空引用(Visual Basic 中为 Nothing),但值可以。

SortedList 的容量是列表可拥有的元素数。随着向 SortedList 中添加元素,容量通过重新分配按需自动增加。可通过调用 TrimToSize 或通过显式设置 Capacity 属性减少容量。

SortedList 的元素将按照特定的 IComparer 实现(在创建 SortedList 时指定)或按照键本身提供的 IComparable 实现并依据键来进行排序。不论在哪种情况下,SortedList 都不允许重复键。

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

由于要进行排序,所以在 SortedList 上操作比在 Hashtable

上操作要慢。但是,SortedList 允许通过相关联键或通过索引对值进行访问,可提供更大的灵活性。

一。添加删除

1。public virtual void Add(object key,object value);

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

将带有指定键和值的元素添加到 SortedList。

通过设置 SortedList 中不存在的键的值,Item

属性也可用于添加新元素。例如:myCollection["myNonexistentKey"] = myValue。但是,如

果指定的键已经存在于 SortedList 中,则设置 Item 属性将改写旧值。相比之下,Add 方法

不修改现有元素。

SortedList sList = new SortedList();

sList.Add(1,"d");

sList.Add(2,"c");

sList.Add(3,"b");

sList.Add(4,"a");

//结果为d c b a,所以可知是按键排序,而非值排序

DropDownList3.DataSource = sList;

DropDownList3.DataTextField = "Key";

DropDownList3.DataValueField = "Value";

DropDownList3.DataBind();

2。public virtual void Remove(object key);

从 SortedList 中移除带有指定键的元素

如果 SortedList 不包含带有指定键的元素,则 SortedList 保持不变。不引发异常

SortedList sList = new SortedList();

sList.Add(1,"d");

sList.Add(2,"c");

sList.Add(3,"b");

sList.Add(4,"a");

//sList.Remove("b"); 错误,是按key删除,而非Value

sList.Remove(3); //删除了[3,"b"]

DropDownList3.DataSource = sList;

DropDownList3.DataTextField = "Key";

DropDownList3.DataValueField = "Value";

DropDownList3.DataBind();

3。public virtual void RemoveAt(int index);

移除 SortedList 的指定索引处的元素。

SortedList sList = new SortedList();

sList.Add(1,"d");

sList.Add(2,"c");

sList.Add(3,"b");

sList.Add(4,"a");

sList.RemoveAt(3); //删除的是[4,"a"],这里的参数是索引号,而非键值,

//与sList.Remove(3)不同; sList.Remove(3)删除了[3,"b"]

DropDownList3.DataSource = sList;

DropDownList3.DataTextField = "Key";

DropDownList3.DataValueField = "Value";

DropDownList3.DataBind();

4。public virtual void Clear();

从 SortedList 中移除所有元素

Count 设置为零。Capacity 保持不变。若要重置 SortedList 的容量,请调用 TrimToSize 或直接设置 Capacity 属性。截去空 SortedList 会将 SortedList 的容量设置为默认容量,而不是零

二。与索引有关的操作

1。public virtual void SetByIndex(int index,object value);

替换 SortedList 中指定索引处的值。

SortedList sList = new SortedList();

sList.Add(1,"d");

sList.Add(2,"c");

sList.Add(3,"b");

sList.Add(4,"a");

sList.SetByIndex(1,"dddddd"); //1为索引,如果Count<2,则出错,也就是说必须存在

//而sList[2] = "dddddd";不存在这种现象,

//也就是说sList[2] = "dddddd"是

//如果键存在在修改值,不存在则添加

DropDownList3.DataSource = sList;

DropDownList3.DataTextField = "Key";

DropDownList3.DataValueField = "Value";

DropDownList3.DataBind();

2。public virtual object GetByIndex(int index);

获取 SortedList 的指定索引处的值。

index必须小于Count,否则出错

SortedList sList = new SortedList();

sList.Add(1,"d");

sList.Add(2,"c");

sList.Add(3,"b");

sList.Add(4,"a");

//sList.Clear();

int nIndex = 2;

if (nIndex<sList.Count)

{

Label3.Text = sList.GetByIndex(nIndex).ToString();

}

else

{

Label3.Text = "nIndex>=Count";

}

3.public virtual int IndexOfKey(object key);

返回 SortedList 中指定键的从索引

这是Hashtable所没有的,因为Hashtable没有有序这个概念,它的排序是内部的

4.public virtual int IndexOfValue(object value);

返回指定的值在 SortedList 中第一个匹配项的索引

这是Hashtable所没有的,因为Hashtable没有有序这个概念,它的排序是内部的

SortedList sList = new SortedList();

sList.Add(1,"d");

sList.Add(2,"c");

sList.Add(3,"b");

sList.Add(4,"a");

sList.Add(5,"d");

int nIndex = 0;

nIndex = sList.IndexOfKey(1); //为0

nIndex = sList.IndexOfValue("d"); //值匹配的有两个,这时返回第一个匹配的,所以为0

三。其他

1.public virtual object GetKey(int index);

获取 SortedList 的指定索引处的键

这也是Hashtable所不可能有的

2.public virtual IList GetKeyList();

获取 SortedList 中的键

SortedList sList = new SortedList();

sList.Add(1,"d");

sList.Add(2,"c");

sList.Add(3,"b");

sList.Add(4,"a");

sList.Add(5,"d");

Label3.Text = "";

IList iList = sList.GetKeyList();

for (int i=0; i<sList.Count; i++)

{

Label3.Text += iList[i].ToString();

Label3.Text += " ";

}

注:IList 接口,表示可按照索引单独访问的一组对象,其中有一个Item属性,在C#也就就是索引器

3.public virtual IList GetValueList();

获取 SortedList 中的值

4.public virtual bool Contains(object key);

确定 SortedList 是否包含特定键

5.public virtual bool ContainsKey(object key);

确定 SortedList 是否包含特定键

与Contains(object key);完全同

6.public virtual bool ContainsValue(object value);

确定 SortedList 是否包含特定值

上述这三个函数与Hashtable完全相同

7.public virtual void TrimToSize();

将容量设置为 SortedList 中元素的实际数目

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有