【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

 

 

posted @   小林野夫  阅读(1373)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
原文链接:https://www.cnblogs.com/cdaniu/
点击右上角即可分享
微信分享提示