C# 排序列表(SortedList)
在 C# 中,排序列表(SortedList) 是一种按键自动排序的集合,它通过键值对存储数据,并在添加或更新时根据键的顺序(升序)自动排序。
SortedList 类代表了一系列按照键来排序的 key => value 对,这些键值对可以通过键和索引来访问。
排序列表是数组和哈希表的组合。它包含一个可使用键或索引访问各项的列表。如果您使用索引访问各项,则它是一个动态数组(ArrayList),如果您使用键访问各项,则它是一个哈希表(Hashtable)。集合中的各项总是按键值排序。
SortedList 有两种版本:
- 非泛型
SortedList
(System.Collections.SortedList
) - 泛型
SortedList<TKey, TValue>
(System.Collections.Generic.SortedList<TKey, TValue>
)
特点:
- 自动排序:所有键都按照升序排序,无需手动调用排序方法。
- 键值对存储:每个键都唯一,与其关联的值可以重复。
- 动态调整容量:根据需要自动调整内部存储的大小。
- 索引访问:通过键或索引访问数据。
- 高效操作:检索、插入、删除的平均时间复杂度为 O(log n)。
SortedList 类的方法和属性
下表列出了 SortedList 类的一些常用的 属性:
属性名称 | 类型 | 描述 |
---|---|---|
Count | int | 获取排序列表中键值对的数量。 |
Capacity | int | 获取或设置排序列表的容量。 |
Comparer | IComparer 或 IComparer<TKey> | 获取用于对键进行排序的比较器。 |
IsReadOnly | bool | 指示排序列表是否为只读。 |
IsFixedSize | bool | 指示排序列表是否具有固定大小(始终为 false )。 |
Keys | ICollection 或 IList<TKey> | 获取排序列表中的所有键。 |
Values | ICollection 或 IList<TValue> | 获取排序列表中的所有值。 |
下表列出了 SortedList 类的一些常用的 方法:
方法名称 | 返回类型 | 描述 |
---|---|---|
添加与移除 | ||
Add(TKey key, TValue value) | void | 将指定的键值对添加到排序列表。 |
Remove(TKey key) | bool | 从排序列表中移除具有指定键的元素。 |
RemoveAt(int index) | void | 移除排序列表中指定索引位置的键值对。 |
Clear() | void | 移除排序列表中的所有元素。 |
查找与访问 | ||
ContainsKey(TKey key) | bool | 确定排序列表是否包含指定的键。 |
ContainsValue(TValue value) | bool | 确定排序列表是否包含指定的值。 |
IndexOfKey(TKey key) | int | 返回指定键的索引。 |
IndexOfValue(TValue value) | int | 返回指定值的索引。 |
TryGetValue(TKey key, out TValue value) | bool | 获取与指定键相关联的值,如果存在则返回 true 。 |
复制与枚举 | ||
CopyTo(Array array, int index) | void | 将排序列表中的元素复制到数组,从指定索引开始。 |
GetEnumerator() | IEnumerator | 返回一个枚举器,用于循环访问排序列表中的元素。 |
实例
下面的实例演示了排序列表(SortedList)的概念。
非泛型版操作:
实例
using System;
using System.Collections;
namespace CollectionsApplication
{
class Program
{
static void Main(string[] args)
{
SortedList sl = new SortedList();
sl.Add("001", "Zara Ali");
sl.Add("002", "Abida Rehman");
sl.Add("003", "Joe Holzner");
sl.Add("004", "Mausam Benazir Nur");
sl.Add("005", "M. Amlan");
sl.Add("006", "M. Arif");
sl.Add("007", "Ritesh Saikia");
if (sl.ContainsValue("Nuha Ali"))
{
Console.WriteLine("This student name is already in the list");
}
else
{
sl.Add("008", "Nuha Ali");
}
// 获取键的集合
ICollection key = sl.Keys;
foreach (string k in key)
{
Console.WriteLine(k + ": " + sl[k]);
}
}
}
}
using System.Collections;
namespace CollectionsApplication
{
class Program
{
static void Main(string[] args)
{
SortedList sl = new SortedList();
sl.Add("001", "Zara Ali");
sl.Add("002", "Abida Rehman");
sl.Add("003", "Joe Holzner");
sl.Add("004", "Mausam Benazir Nur");
sl.Add("005", "M. Amlan");
sl.Add("006", "M. Arif");
sl.Add("007", "Ritesh Saikia");
if (sl.ContainsValue("Nuha Ali"))
{
Console.WriteLine("This student name is already in the list");
}
else
{
sl.Add("008", "Nuha Ali");
}
// 获取键的集合
ICollection key = sl.Keys;
foreach (string k in key)
{
Console.WriteLine(k + ": " + sl[k]);
}
}
}
}
当上面的代码被编译和执行时,它会产生下列结果:
001: Zara Ali 002: Abida Rehman 003: Joe Holzner 004: Mausam Banazir Nur 005: M. Amlan 006: M. Arif 007: Ritesh Saikia 008: Nuha Ali
泛型版:
实例
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
// 创建泛型 SortedList
SortedList<int, string> sortedList = new SortedList<int, string>();
// 添加键值对
sortedList.Add(2, "Banana");
sortedList.Add(1, "Apple");
sortedList.Add(3, "Cherry");
// 自动按键排序
Console.WriteLine("SortedList contents:");
foreach (var kvp in sortedList)
{
Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");
}
// 查找与访问
Console.WriteLine($"\nValue for key 2: {sortedList[2]}"); // 输出:Banana
// 删除元素
sortedList.Remove(1);
Console.WriteLine("\nAfter removing key 1:");
foreach (var kvp in sortedList)
{
Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");
}
// 检查键与值
Console.WriteLine($"\nContains key 3: {sortedList.ContainsKey(3)}"); // 输出:True
Console.WriteLine($"Contains value 'Apple': {sortedList.ContainsValue("Apple")}"); // 输出:False
}
}
using System.Collections.Generic;
class Program
{
static void Main()
{
// 创建泛型 SortedList
SortedList<int, string> sortedList = new SortedList<int, string>();
// 添加键值对
sortedList.Add(2, "Banana");
sortedList.Add(1, "Apple");
sortedList.Add(3, "Cherry");
// 自动按键排序
Console.WriteLine("SortedList contents:");
foreach (var kvp in sortedList)
{
Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");
}
// 查找与访问
Console.WriteLine($"\nValue for key 2: {sortedList[2]}"); // 输出:Banana
// 删除元素
sortedList.Remove(1);
Console.WriteLine("\nAfter removing key 1:");
foreach (var kvp in sortedList)
{
Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");
}
// 检查键与值
Console.WriteLine($"\nContains key 3: {sortedList.ContainsKey(3)}"); // 输出:True
Console.WriteLine($"Contains value 'Apple': {sortedList.ContainsValue("Apple")}"); // 输出:False
}
}