English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
SortedList<TKey, TValue> y SortedList son clases de colección que pueden almacenar pares clave-valor ordenados por clave basados en la implementación de IComparer. Por ejemplo, si la clave es de tipo primario, se ordena en orden ascendente.
C# admite SortedList genérico y no genérico. Se recomienda usar SortedList < TKey, TValue > genérico, porque se ejecuta más rápido y es menos probable que se produzcan errores.
SortedList<TKey,TValue> es un array de pares clave-valor ordenados por clave.
Los elementos se ordenan inmediatamente después de agregarlos. Se ordenan los tipos de clave primarios en orden ascendente según IComparer < T >, y se ordenan las claves de objeto.
Pertenece al espacio de nombres System.Collection.Generic.
La clave debe ser única y no puede ser null.
El valor puede ser null o repetido.
Se puede acceder al valor pasando la clave relevante al índice mySortedList[key]
Contiene elementos de tipo KeyValuePair <TKey,TValue>
Usa menos memoria que SortedDictionary<TKey,TValue>.
La recuperación de datos después de la ordenación es más rápida, mientras que la inserción y eliminación de pares clave-valor en SortedDictionary<TKey,TValue> es más rápida.
El siguiente ejemplo muestra cómo crear una SortedList genérica<TKey, TValue> y agregar pares clave-valor.
//Lista de claves enteras, valores de cadena SortedList<int, string> numberNames = new SortedList<int, string>(); numberNames.Add(3, "Three"); numberNames.Add(1, "One"); numberNames.Add(2, "Two"); numberNames.Add(4, null); numberNames.Add(10, "Diez"); numberNames.Add(5, "Five"); //Lo siguiente provocará una excepción //numberNames.Add("Three", 3); //Error en tiempo de compilación: la clave debe ser de tipo int //numberNames.Add(1, "One"); //Ejecución en tiempo de ejecución: clave repetida //numberNames.Add(null, "Five");//Excepción en tiempo de ejecución: la clave no puede ser null
En el ejemplo anterior, un objeto SortedList<TKey, TValue> genérico se crea especificando el tipo de clave y valor que va a almacenar. SortedList<int, string> almacenará claves de tipo int y valores de tipo string.
El método Add() se utiliza para agregar un solo par clave-valor en SortedList. La clave no puede ser null o repetida. Si existe, lanzará una excepción en tiempo de ejecución. El valor puede repetirse, y si el tipo puede ser null, puede ser null.
Al instanciar la instancia de SortedList, usar colección-Sintaxis de inicializador para inicializar con múltiples pares clave-valor, como se muestra a continuación.
//Crear SortedList con claves de cadena y valores de cadena //Usar colección-sintaxis de inicializador SortedList<string, string> cities = new SortedList<string, string>() { {"London", "UK"}, {"New York", "USA"}, {"Mumbai", "India"}, {"Johannesburg", "South Africa"} });
Después de agregar un par clave-valor a SortedList, reordenar los pares clave-valor según el orden ascendente de las claves. El siguiente ejemplo muestra todos los claves y valores utilizando un ciclo foreach.
SortedList<int, string> numberNames = new SortedList<int, string>() { {3, "Three"}, {5, "Five"}, {1, "One"} }); Console.WriteLine("---Par clave-valor inicial--"); foreach(KeyValuePair<int, string> kvp in numberNames) Console.WriteLine("key: {0}, value: {1}}")1Console.WriteLine("key: {0}, value: {1}"); numberNames.Add(6, "Six"); numberNames.Add(2, "Two"); numberNames.Add(4, "Four"); Console.WriteLine("---Después de agregar un nuevo par clave-valor--"); foreach (var kvp in numberNames) Console.WriteLine("key: {0}, value: {1}}")1Console.WriteLine("key: {0}, value: {1}");
---Par clave-valor inicial-- key: 1, value: One key: 3, value: Three key: 5, value: Five ---Después de agregar un nuevo par clave-valor-- key: 1, value: One key: 2, value: Two key: 3, value: Three key: 4, value: Four key: 5, value: Five key: 6, valor: Six
En el índiceador SortedList[key], especificar una clave para obtener o establecer el valor en SortedList.
SortedList<int, string> numberNames = new SortedList<int, string>() { {3, "Three"}, {1, "One"}, {2, "Two" }); Console.WriteLine(numberNames[1]); //Salida: One Console.WriteLine(numberNames[2]); //Salida: Two Console.WriteLine(numberNames[3]); //Salida: Three //Console.WriteLine(numberNames[10]); //Lanzamiento en tiempo de ejecución KeyNotFoundException numberNames[2] = "TWO"; //Actualizar el valor numberNames[4] = "Four"; //Si la clave no existe, agregar un nuevo par clave-valor
Arriba, numberNames[10] 将抛出一个KeyNotFoundException因为指定的键10在 sortedlist 中不存在的原因。为防止此异常,请使用ContainsKey()或TryGetValue()方法,如下所示。
SortedList<int, string> numberNames = new SortedList<int, string>() { {3, "Three"}, {1, "One"}, {2, "Two" }); if (numberNames.ContainsKey(4)) { numberNames[4] = "four"; } int result; if (numberNames.TryGetValue(4, out result)) Console.WriteLine("Key: {0}, Value: {1} 4, result);
Key:4, Value: Four
如果要使用for循环迭代SortedList,请使用Keys和Values属性。
SortedList<int, string> numberNames = new SortedList<int, string>() { {3, "Three"}, {1, "One"}, {2, "Two" }); for (int i = 0; i < numberNames.Count;++) { Console.WriteLine("key: {0}, value: {1}}")1}, numberNames.Keys[i], numberNames.Values[i]); }
key: 1, value: One key: 2, value: Two key: 3, value: Three
使用 Remove(key) 和 RemoveAt(index) 方法从 SortedList 中删除键值对。
SortedList<int, string> numberNames = new SortedList<int, string>() { {3, "Three"}, {1, "One"}, {2, "Two"}, {5, "Five"}, {4, "Four" }); numberNames.Remove(1);//移除键1对 numberNames.Remove(10);//移除键1对,如果不存在,则没有错误 numberNames.RemoveAt(0);//从索引0删除键值对 //numberNames.RemoveAt(10);//运行时异常:ArgumentOutOfRangeException foreach (var kvp in numberNames) Console.WriteLine("key: {0}, value: {1}}")1Console.WriteLine("key: {0}, value: {1}");
key: 3, value: Three key: 4, value: Four key: 5, value: Five
La siguiente imagen ilustra la jerarquía de SortedList.
Puede obtener más información sobre los métodos y propiedades de SortedList en docs.microsoft.com