【C# 集合】有序列表(SortedList)
有序列表(SortedList),也称为序列。他可以对列表中每个元素的插入位置进行精确地控制。 可以根据元素的在列表中的位置访问元素,并搜索列表中的元素。 列表允许重复的元素。
有序列表是数组和哈希表的组合。 它包含一个可使用键或索引访问各项的列表。 如果您使用索引访问各项,则它是一个动态数组(ArrayList),如果您使用键访问各项,则它是一个哈希表(Hashtable)。
有序列表集合中的各项总是按键值排序。
泛型有序列表SortedList<TKey,TValue>类
如果需要基于键对所需集合排序,就可以使用SortedList<TKey,TValue>类。这个类按照键给元素排序。这个集合中的值和键都可以使用任何类型。定义为键的自定义类型需要实现IComparer<T>接口,用于给列表中的元素排序。
使用构造函数创建一个有序列表,在用Add方法添加:
var books = new SortedList<string, string>();
books.Add("Professional WPF Programming", "978–0–470–04180–2");
books.Add("Professional ASP.NET MVC 3", "978–1–1180–7658–3");
还可以使用索引器将元素添加到列表中
books["Beginning Visual C# 2010"] = "978–0–470-50226-6";
books["Professional C# 4 and .NET 4"] = "978–0–470–50225–9";
SortedList<TKey,TValue>有多个重载版本的构造函数。
可以使用foreach语句遍历列表,枚举器返回的元素是KeyValuePair<TKey,TValue>类型,其中包含了键和值:
foreach (KeyValuePair<string, string> book in books)
{
Console.WriteLine("{0}, {1}", book.Key, book.Value);
}
迭代语句会按键的顺序显示:
Beginning Visual C# 2010, 978–0–470-50226-6
Professional ASP.NET MVC 3, 978–1–1180–7658–3
Professional C# 4 and .NET 4, 978–0–470–50225–9
Professional WPF Programming, 978–0–470–04180–2
也可以使用Values和Keys属性访问值和键:
foreach (string isbn in books.Values)
{
Console.WriteLine(isbn);
}
foreach (string title in books.Keys)
{
Console.WriteLine(title);
}
如果尝试使用索引器访问一个元素,但传递的键不存在,就会抛出异常。ContainsKey()方法,可以判断所传递的键是否存在于集合中。TryGetValue该方法尝试获得指定键的值,如果指定的=键对应的值不存在,该方法不会抛出异常。
SortedList 类的方法和属性
下表列出了 SortedList 类的一些常用的 属性:
属性 | 描述 |
---|---|
Capacity | 获取或设置 SortedList 的容量。 |
Count | 获取 SortedList 中的元素个数。 |
IsFixedSize | 获取一个值,表示 SortedList 是否具有固定大小。 |
IsReadOnly | 获取一个值,表示 SortedList 是否只读。 |
Item | 获取或设置与 SortedList 中指定的键相关的值。 |
Keys | 获取 SortedList 中的键。 |
Values | 获取 SortedList 中的值。 |
下表列出了 SortedList 类的一些常用的 方法:
方法名 | 描述 |
---|---|
public virtual void Add(object key,object value); | 向 SortedList 添加一个带有指定的键和值的元素。 |
public virtual void Clear(); | 从 SortedList 中移除所有的元素。 |
public virtual bool ContainsKey(object key); | 判断 SortedList 是否包含指定的键。 |
public virtual bool ContainsValue(object value); | 判断 SortedList 是否包含指定的值。 |
public virtual object GetByIndex(int index); | 获取 SortedList 的指定索引处的值。 |
public virtual object GetKey(int index); | 获取 SortedList 的指定索引处的键。 |
public virtual IList GetKeyList(); | 获取 SortedList 中的键。 |
public virtual IList GetValueList(); | 获取 SortedList 中的值。 |
public virtual int IndexOfKey(object key); | 返回 SortedList 中的指定键的索引,索引从零开始。 |
public virtual int IndexOfValue( object value); | 返回 SortedList 中的指定值第一次出现的索引,索引从零开始。 |
public virtual void Remove(object key); | 从 SortedList 中移除带有指定的键的元素。 |
public virtual void RemoveAt(int index); | 移除 SortedList 的指定索引处的元素。 |
public virtual void TrimToSize(); | 设置容量为 SortedList 中元素的实际个数。 |
有序列表范例
下面的范例演示了有序列表(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]); } } } }
当上面的代码被编译和执行时,它会产生下列结果:
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律