在C#中,SortedList是键/值对的集合,这些键/值对是根据键排序的。默认情况下,此集合以升序对键/值对进行排序。它具有通用和非通用的集合类型。泛型SortedList在System.Collections.Generic
命名空间中定义,而非泛型SortedList在System.Collections
命名空间下定义,这里我们将讨论非泛型类型SortedList。
重要事项:
- SortedList类实现IEnumerable , ICollection , IDictionary和ICloneable接口。
- 在SortedList中,可以通过元素的键或索引来访问元素。
- SortedList对象在内部维护两个数组来存储列表的元素,即,一个数组用于键,另一个数组用于关联的值。
- 在此,键不能为null,但值可以为null。
- SortedList对象的容量是它可以容纳的键/值对的数量。
- 在SortedList中,不允许重复的键。
- 在SortedList中,由于非通用集合,您可以存储相同类型和不同类型的值。如果在程序中使用通用SortedList,则值的类型必须相同。
- 在SortedList中,不能将不同数据类型的键存储在同一SortedList中,因为编译器将引发异常。因此,始终将键添加到相同类型的SortedList中。
- 您还可以将SortedList的键/值对转换为DictionaryEntry。
如何创建一个SortedList?
SortedList类提供了6种不同类型的构造函数,这些构造函数用于创建SortedList,这里我们仅使用SortedList()构造函数。要了解有关SortedList的构造函数的更多信息,可以参考C#。 SortedList类。
SortedList():用于创建SortedList类的实例,该实例为空,具有默认初始容量,并根据添加到SortedList对象的每个键实现的IComparable接口进行排序。
步骤1:借助using关键字,在程序中包含System.Collections命名空间:
using System.Collections;
步骤2:使用SortedList类创建SortedList,如下所示:
SortedList list_name = new SortedList();
步骤3:如果要在SortedList中添加键/值对,请使用Add()方法在SortedList中添加键/值对。而且,您也可以在不使用Add()方法的情况下将键/值对存储在SortedList中,这种语法称为集合初始化语法,如以下示例所示。
步骤4:使用三种不同的方式访问SortedList的键/值对:
- for循环:您可以使用for循环访问SortedList的键/值对。
例子:
for (int x = 0; x < my_slist1.Count; x++) { Console.WriteLine("{0} and {1}", my_slist1.GetKey(x), my_slist1.GetByIndex(x)); }
- 使用索引:您可以使用索引访问SortedList的各个值。您需要将键或索引作为参数传递,以找到相应的值。如果指定的键不可用,则编译器将引发错误。
例子:
Console.WriteLine("Value is:{0}", my_slist1[1.04]); string x = (string)my_slist[1.02]; Console.WriteLine(x);
- foreach循环:您可以使用foreach循环来访问SortedList的键/值对。
例子:
foreach(DictionaryEntry pair in my_slist1) { Console.WriteLine("{0} and {1}", pair.Key, pair.Value); }
例子:
// C# program to illustrate how
// to create a sortedlist
using System;
using System.Collections;
class GFG {
// Main Method
static public void Main()
{
// Creating a sortedlist
// Using SortedList class
SortedList my_slist1 = new SortedList();
// Adding key/value pairs in
// SortedList using Add() method
my_slist1.Add(1.02, "This");
my_slist1.Add(1.07, "Is");
my_slist1.Add(1.04, "SortedList");
my_slist1.Add(1.01, "Tutorial");
foreach(DictionaryEntry pair in my_slist1)
{
Console.WriteLine("{0} and {1}",
pair.Key, pair.Value);
}
Console.WriteLine();
// Creating another SortedList
// using Object Initializer Syntax
// to initalize sortedlist
SortedList my_slist2 = new SortedList() {
{ "b.09", 234 },
{ "b.11", 395 },
{ "b.01", 405 },
{ "b.67", 100 }};
foreach(DictionaryEntry pair in my_slist2)
{
Console.WriteLine("{0} and {1}",
pair.Key, pair.Value);
}
}
}
1.01 and Tutorial
1.02 and This
1.04 and SortedList
1.07 and Is
b.01 and 405
b.09 and 234
b.11 and 395
b.67 and 100
如何从SortedList中删除元素?
- 清除:此方法用于从SortedList对象中删除所有元素。
- Remove:此方法用于从SortedList对象中删除具有指定键的元素。
- RemoveAt:此方法用于删除SortedList对象的指定索引处的元素。
例子:
// C# program to illustrate how to
// remove key/value pairs from
// the sortedlist
using System;
using System.Collections;
class GFG {
// Main Method
static public void Main()
{
// Creating a sortedlist
// Using SortedList class
SortedList my_slist = new SortedList();
// Adding key/value pairs in SortedList
// Using Add() method
my_slist.Add(1.02, "This");
my_slist.Add(1.07, "Is");
my_slist.Add(1.04, "SortedList");
my_slist.Add(1.01, "Tutorial");
foreach(DictionaryEntry pair in my_slist)
{
Console.WriteLine("{0} and {1}",
pair.Key, pair.Value);
}
Console.WriteLine();
// Remove value having 1.07 key
// Using Remove() method
my_slist.Remove(1.07);
// After Remove() method
foreach(DictionaryEntry pair in my_slist)
{
Console.WriteLine("{0} and {1}",
pair.Key, pair.Value);
}
Console.WriteLine();
// Remove element at index 2
// Using RemoveAt() method
my_slist.RemoveAt(2);
// After RemoveAt() method
foreach(DictionaryEntry pair in my_slist)
{
Console.WriteLine("{0} and {1}",
pair.Key, pair.Value);
}
Console.WriteLine();
// Remove all key/value pairs
// Using Clear method
my_slist.Clear();
Console.WriteLine("The total number of key/value pairs"+
" present in my_slist:{0}", my_slist.Count);
}
}
1.01 and Tutorial
1.02 and This
1.04 and SortedList
1.07 and Is
1.01 and Tutorial
1.02 and This
1.04 and SortedList
1.01 and Tutorial
1.02 and This
The total number of key/value pairs present in my_slist:0
如何在SortedList中检查键/值对的可用性?
在SortedList中,可以使用以下方法检查给定对是否存在:
- 包含:此方法用于检查SortedList对象是否包含特定键。
- ContainsKey:此方法用于检查SortedList对象是否包含特定键。
- ContainsValue:此方法用于检查SortedList对象是否包含特定值。
例子:
// C# program to illustrate how to
// check the given key or value
// present in the sortedlist or not
using System;
using System.Collections;
class GFG {
// Main Method
static public void Main()
{
// Creating a sortedlist
// Using SortedList class
SortedList my_slist = new SortedList();
// Adding key/value pairs in
// SortedList using Add() method
my_slist.Add(1.02, "This");
my_slist.Add(1.07, "Is");
my_slist.Add(1.04, "SortedList");
my_slist.Add(1.01, "Tutorial");
// Using Contains() method to check
// the specified key is present or not
if (my_slist.Contains(1.02) == true)
{
Console.WriteLine("Key is found...!!");
}
else
{
Console.WriteLine("Key is not found...!!");
}
// Using ContainsKey() method to check
// the specified key is present or not
if (my_slist.ContainsKey(1.03) == true)
{
Console.WriteLine("Key is found...!!");
}
else
{
Console.WriteLine("Key is not found...!!");
}
// Using ContainsValue() method to check
// the specified value is present or not
if (my_slist.ContainsValue("Is") == true)
{
Console.WriteLine("Value is found...!!");
}
else
{
Console.WriteLine("Value is not found...!!");
}
}
}
Key is found...!!
Key is not found...!!
Value is found...!!