SortedList 是能自动排序的 "Key/Value" 列表类(排序是依据 Key), 并能通过索引访问元素.
它像是 Hashtable(哈希表)的升级, 它们的每个元素都是视为一个 DictionaryEntry(Key/Value) 结构体.
正因为它比 Hashtable 多出了排序和索引, 所以效率不及 Hashtable.
主要成员:
/* 属性 */ Capacity; //容量 Count; //元素数 Keys; //键集合(ICollection) Values; //值集合(ICollection) /* 方法 */ Add() //添加 Clear() //清空 Contains() //是否包含指定键 ContainsKey() //同 Contains() ContainsValue() //是否包含指定值 GetByIndex() //根据索引取 Value GetKey() //根据索引获取 Key GetKeyList() //取键列表(IList) GetValueList() //取值列表(IList) IndexOfKey() //获取指定键的索引 IndexOfValue() //获取指定值的索引 Remove() //根据键值删除 RemoveAt() //根据索引删除 SetByIndex() //根据索引设置值 TrimToSize() //优化容量(Capacity = Count)
元素会被自动排序:
protected void Button1_Click(object sender, EventArgs e) { SortedList sList = new SortedList(); sList.Add("2k", "x"); //值可以重复, 键不可以重复 sList.Add("1k", "xx"); sList.Add("4k", "xxx"); sList.Add("3k", "xxxx"); string str = ""; foreach (DictionaryEntry de in sList) { str += string.Format("{0} : {1}\n", de.Key, de.Value); } TextBox1.Text = str; } /******** 1k : xx 2k : x 3k : xxxx 4k : xxx *********/
取值:
protected void Button1_Click(object sender, EventArgs e) { SortedList sList = new SortedList(); sList.Add("k1", "AAA"); sList.Add("k2", "BBB"); sList.Add("k3", "CCC"); sList.Add("k4", "DDD"); string s1 = sList["k2"].ToString(); //BBB string s2 = sList.GetByIndex(1).ToString(); //BBB string s3 = sList.GetKey(1).ToString(); //k2 TextBox1.Text = s1 + "\n" + s2 + "\n" + s3; }
改值:
protected void Button1_Click(object sender, EventArgs e) { SortedList sList = new SortedList(); sList.Add("4", "AAA"); sList.Add("3", "BBB"); sList.Add("2", "CCC"); sList.Add("1", "DDD"); sList["4"] = "aaa"; sList.SetByIndex(1, "ccc"); string str = ""; for (int i = 0; i < sList.Count; i++) { str += sList.GetByIndex(i).ToString() + " "; //DDD ccc BBB aaa } TextBox1.Text = str; }
删除元素与获取索引:
protected void Button1_Click(object sender, EventArgs e) { SortedList sList = new SortedList(); sList.Add("4", "AAA"); sList.Add("3", "BBB"); sList.Add("2", "CCC"); sList.Add("1", "DDD"); if (sList.Contains("2")) { sList.Remove("2"); } // 将删除 2/CCC if (sList.Count > 0) { sList.RemoveAt(sList.Count - 1); } // 将删除 4/AAA //分别查找剩余元素的索引 int n1 = sList.IndexOfKey("3"); // 1 int n2 = sList.IndexOfKey("1"); // 0 int n3 = sList.IndexOfValue("BBB"); // 1 int n4 = sList.IndexOfValue("DDD"); // 0 sList.Clear(); int n5 = sList.IndexOfKey("3"); //-1 : 找不到则返回 -1 int n6 = sList.IndexOfValue("BBB"); //-1 TextBox1.Text = string.Concat(n1 + "\n" + n2 + "\n" + n3 + "\n" + n4 + "\n" + n5 + "\n" + n6); }
Capacity、Count 与 TrimToSize():
protected void Button1_Click(object sender, EventArgs e) { SortedList sList = new SortedList(100); //预留储存 100 个元素的空间 int n1 = sList.Capacity; //100 int n2 = sList.Count; //0 sList.Add(1, 111); sList.Add(2, 222); int n3 = sList.Capacity; //100 int n4 = sList.Count; //2 sList.TrimToSize(); int n5 = sList.Capacity; //2 int n6 = sList.Count; //2 TextBox1.Text = string.Concat(n1 + "\n" + n2 + "\n" + n3 + "\n" + n4 + "\n" + n5 + "\n" + n6); }
分别获取键集合、值集合、键列表、值列表:
protected void Button1_Click(object sender, EventArgs e) { SortedList sList = new SortedList(5); sList.Add("E", 5.55); sList.Add("C", 3.33); sList.Add("D", 4.44); sList.Add("A", 1.11); sList.Add("B", 2.22); ICollection keys = sList.Keys; ICollection values = sList.Values; IList keyList = sList.GetKeyList(); IList valueList = sList.GetValueList(); string s1, s2, s3, s4; s1 = s2 = s3 = s4 = ""; foreach (var k in keys) { s1 += k.ToString() + " "; } //A B C D E foreach (var v in values) { s2 += v.ToString() + " "; } //1.11 2.22 3.33 4.44 5.55 for (int i = 0; i < keyList.Count; i++) { s3 += keyList[i].ToString() + " "; } //A B C D E for (int i = 0; i < valueList.Count; i++) { s4 += valueList[i].ToString() + " "; } //1.11 2.22 3.33 4.44 5.55 TextBox1.Text = s1 + "\n" + s2 + "\n" + s3 + "\n" + s4; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
2010-01-05 RegularExpressions(1) 一个 Net 样式的、适用于 Delphi 2009 之后版本的正则表达式组件
2008-01-05 Delphi 中的 XMLDocument 类详解(16) - 节点列表中的第一个与最后一个节点
2008-01-05 Delphi 中的 XMLDocument 类详解(15) - 创建与保存 xml