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; }