SortedList Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет коллекцию пар "ключ-значение", упорядоченных по ключам. Доступ к парам можно получить по ключу и индексу.
public ref class SortedList : System::Collections::IDictionary
public ref class SortedList : ICloneable, System::Collections::IDictionary
public class SortedList : System.Collections.IDictionary
public class SortedList : ICloneable, System.Collections.IDictionary
[System.Serializable]
public class SortedList : ICloneable, System.Collections.IDictionary
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class SortedList : ICloneable, System.Collections.IDictionary
type SortedList = class
interface ICollection
interface IEnumerable
interface IDictionary
type SortedList = class
interface ICollection
interface IEnumerable
interface IDictionary
interface ICloneable
[<System.Serializable>]
type SortedList = class
interface IDictionary
interface ICollection
interface IEnumerable
interface ICloneable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type SortedList = class
interface IDictionary
interface ICollection
interface IEnumerable
interface ICloneable
Public Class SortedList
Implements IDictionary
Public Class SortedList
Implements ICloneable, IDictionary
- Наследование
-
SortedList
- Атрибуты
- Реализации
Примеры
В следующем примере кода показано, как создать и инициализировать SortedList объект, а также как распечатать его ключи и значения.
#using <system.dll>
using namespace System;
using namespace System::Collections;
public ref class SamplesSortedList
{
public:
static void PrintKeysAndValues( SortedList^ myList )
{
Console::WriteLine( "\t-KEY-\t-VALUE-" );
for ( int i = 0; i < myList->Count; i++ )
{
Console::WriteLine( "\t{0}:\t{1}", myList->GetKey( i ), myList->GetByIndex( i ) );
}
Console::WriteLine();
}
};
int main()
{
// Creates and initializes a new SortedList.
SortedList^ mySL = gcnew SortedList;
mySL->Add( "Third", "!" );
mySL->Add( "Second", "World" );
mySL->Add( "First", "Hello" );
// Displays the properties and values of the SortedList.
Console::WriteLine( "mySL" );
Console::WriteLine( " Count: {0}", mySL->Count );
Console::WriteLine( " Capacity: {0}", mySL->Capacity );
Console::WriteLine( " Keys and Values:" );
SamplesSortedList::PrintKeysAndValues( mySL );
}
/*
This code produces the following output.
mySL
Count: 3
Capacity: 16
Keys and Values:
-KEY- -VALUE-
First: Hello
Second: World
Third: !
*/
using System;
using System.Collections;
public class SamplesSortedList2
{
public static void Main()
{
// Creates and initializes a new SortedList.
SortedList mySL = new SortedList();
mySL.Add("Third", "!");
mySL.Add("Second", "World");
mySL.Add("First", "Hello");
// Displays the properties and values of the SortedList.
Console.WriteLine("mySL");
Console.WriteLine(" Count: {0}", mySL.Count);
Console.WriteLine(" Capacity: {0}", mySL.Capacity);
Console.WriteLine(" Keys and Values:");
PrintKeysAndValues(mySL);
}
public static void PrintKeysAndValues(SortedList myList)
{
Console.WriteLine("\t-KEY-\t-VALUE-");
for (int i = 0; i < myList.Count; i++)
{
Console.WriteLine("\t{0}:\t{1}", myList.GetKey(i), myList.GetByIndex(i));
}
Console.WriteLine();
}
}
/*
This code produces the following output.
mySL
Count: 3
Capacity: 16
Keys and Values:
-KEY- -VALUE-
First: Hello
Second: World
Third: !
*/
Imports System.Collections
Public Class SamplesSortedList
Public Shared Sub Main()
' Creates and initializes a new SortedList.
Dim mySL As New SortedList()
mySL.Add("Third", "!")
mySL.Add("Second", "World")
mySL.Add("First", "Hello")
' Displays the properties and values of the SortedList.
Console.WriteLine("mySL")
Console.WriteLine(" Count: {0}", mySL.Count)
Console.WriteLine(" Capacity: {0}", mySL.Capacity)
Console.WriteLine(" Keys and Values:")
PrintKeysAndValues(mySL)
End Sub
Public Shared Sub PrintKeysAndValues(myList As SortedList)
Console.WriteLine(ControlChars.Tab & "-KEY-" & ControlChars.Tab & _
"-VALUE-")
Dim i As Integer
For i = 0 To myList.Count - 1
Console.WriteLine(ControlChars.Tab & "{0}:" & ControlChars.Tab & _
"{1}", myList.GetKey(i), myList.GetByIndex(i))
Next i
Console.WriteLine()
End Sub
End Class
' This code produces the following output.
'
' mySL
' Count: 3
' Capacity: 16
' Keys and Values:
' -KEY- -VALUE-
' First: Hello
' Second: World
' Third: !
Комментарии
Доступ SortedList к элементу можно получить по его ключу, например к элементу в любой IDictionary реализации, или по индексу, как к элементу в любой IList реализации.
Важно!
Не рекомендуется использовать класс для разработки SortedList
новых приложений. Вместо этого рекомендуется использовать универсальный System.Collections.Generic.SortedList<TKey,TValue> класс . Дополнительные сведения см. в статье Неуниверсовые коллекции не должны использоваться на GitHub.
Объект SortedList внутренне поддерживает два массива для хранения элементов списка, то есть один массив для ключей и другой массив для связанных значений. Каждый элемент представляет собой пару "ключ-значение", доступ к которому можно получить как DictionaryEntry объект . Ключ не может иметь значение null
, но значение может иметь значение .
Емкость SortedList объекта — это количество элементов, которые могут храниться SortedList . При добавлении элементов в SortedListемкость автоматически увеличивается по мере необходимости путем перераспределения. Емкость можно уменьшить путем вызова TrimToSize или явного Capacity задания свойства.
Только платформа .NET Framework. Для очень больших SortedList объектов можно увеличить максимальную емкость до 2 миллиардов элементов в 64-разрядной системе, задав enabled
атрибуту <gcAllowVeryLargeObjects>
элемента конфигурации значение true
в среде выполнения.
Элементы SortedList объекта сортируются по ключам либо в соответствии с конкретной IComparer реализацией, указанной SortedList при создании , либо в соответствии с IComparable реализацией, предоставляемой самими ключами. В обоих случаях не допускается дублирование ключей SortedList .
Последовательность индексов основана на последовательности сортировки. При добавлении элемента он вставляется в SortedList правильном порядке сортировки, и индексирование корректируется соответствующим образом. При удалении элемента индексирование также корректируется соответствующим образом. Таким образом, индекс определенной пары "ключ-значение" может измениться по мере добавления или удаления элементов из SortedList объекта .
Операции с SortedList объектом, как правило, выполняются медленнее, чем операции с Hashtable объектом из-за сортировки. Однако обеспечивает большую гибкость, SortedList предоставляя доступ к значениям через связанные ключи или индексы.
Доступ к элементам в этой коллекции можно получить с помощью целочисленного индекса. Индексы в этой коллекции отсчитываются от нуля.
Оператор foreach
языка C# (for each
в Visual Basic) возвращает объект типа элементов в коллекции. Так как каждый элемент SortedList объекта является парой "ключ-значение", тип элемента не является типом ключа или типом значения. Скорее, тип элемента — DictionaryEntry. Пример:
for each (DictionaryEntry de in mySortedList)
{
//...
}
foreach (DictionaryEntry de in mySortedList)
{
//...
}
For Each de As DictionaryEntry In mySortedList
'...
Next de
Оператор foreach
представляет собой оболочку для перечислителя, которая позволяет выполнять только чтение из коллекции, а не запись в коллекцию.
Конструкторы
SortedList() |
Инициализирует новый пустой экземпляр класса SortedList с начальной емкостью по умолчанию, упорядоченный в соответствии с интерфейсом IComparable, который реализован каждым ключом, добавленным в объект SortedList. |
SortedList(IComparer) |
Инициализирует новый пустой экземпляр класса SortedList с начальной емкостью по умолчанию, упорядоченный в соответствии с указанным интерфейсом IComparer. |
SortedList(IComparer, Int32) |
Инициализирует новый пустой экземпляр класса SortedList с указанной начальной емкостью, упорядоченный в соответствии с указанным интерфейсом IComparer. |
SortedList(IDictionary) |
Инициализирует новый экземпляр SortedList, содержащий элементы, скопированные из указанного словаря, обладающий начальной емкостью, равной количеству скопированных элементов и упорядоченный в соответствии с реализацией интерфейса IComparable каждого ключа. |
SortedList(IDictionary, IComparer) |
Инициализирует новый экземпляр SortedList, содержащий элементы, скопированные из указанного словаря, обладающий начальной емкостью, равной количеству скопированных элементов и упорядоченный в соответствии с указанным интерфейсом IComparer. |
SortedList(Int32) |
Инициализирует новый пустой экземпляр класса SortedList с указанной начальной емкостью, упорядоченный в соответствии с интерфейсом IComparable, который реализован каждым ключом, добавленным в объект SortedList. |
Свойства
Capacity |
Возвращает или задает емкость объекта SortedList. |
Count |
Получает количество элементов, содержащихся в объекте SortedList. |
IsFixedSize |
Получает значение, показывающее, имеет ли объект SortedList фиксированный размер. |
IsReadOnly |
Возвращает значение, указывающее, является ли объект SortedList доступным только для чтения. |
IsSynchronized |
Возвращает значение, указывающее на то, является ли доступ к объекту SortedList синхронизированным (потокобезопасным). |
Item[Object] |
Получает или задает значение, связанное с указанным ключом в объекте SortedList. |
Keys |
Получает ключи из объекта SortedList. |
SyncRoot |
Получает объект, который позволяет синхронизировать доступ к объекту SortedList. |
Values |
Получает значения из объекта SortedList. |
Методы
Add(Object, Object) |
Добавляет элемент с указанными ключом и значением в объект SortedList. |
Clear() |
Удаляет все элементы из объекта SortedList. |
Clone() |
Создает неполную копию объекта SortedList. |
Contains(Object) |
Определяет, содержит ли объект SortedList указанный ключ. |
ContainsKey(Object) |
Определяет, содержит ли объект SortedList указанный ключ. |
ContainsValue(Object) |
Определяет, содержит ли объект SortedList указанное значение. |
CopyTo(Array, Int32) |
Копирует элементы объекта SortedList в одномерный объект Array начиная с указанного значения индекса массива. |
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
GetByIndex(Int32) |
Получает значение с указанным индексом из объекта SortedList. |
GetEnumerator() |
Возвращает объект IDictionaryEnumerator, осуществляющий перебор элементов объекта SortedList. |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetKey(Int32) |
Получает ключ с указанным индексом из объекта SortedList. |
GetKeyList() |
Получает ключи из объекта SortedList. |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
GetValueList() |
Получает значения из объекта SortedList. |
IndexOfKey(Object) |
Возвращает индекс (с нуля) указанного ключа в объекте SortedList. |
IndexOfValue(Object) |
Индекс (с нуля) первого вхождения указанного значения в объекте SortedList. |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
Remove(Object) |
Удаляет элемент с указанным ключом из объекта SortedList. |
RemoveAt(Int32) |
Удаляет элемент с указанным индексом из объекта SortedList. |
SetByIndex(Int32, Object) |
Заменяет значение по указанному индексу в объекте SortedList. |
Synchronized(SortedList) |
Возвращает синхронизированную (потокобезопасную) оболочку объекта SortedList. |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
TrimToSize() |
Задает значение емкости, равное действительному количеству элементов в объекте SortedList. |
Явные реализации интерфейса
IEnumerable.GetEnumerator() |
Возвращает объект IEnumerator, осуществляющий перебор SortedList. |
Методы расширения
Cast<TResult>(IEnumerable) |
Приводит элементы объекта IEnumerable к заданному типу. |
OfType<TResult>(IEnumerable) |
Выполняет фильтрацию элементов объекта IEnumerable по заданному типу. |
AsParallel(IEnumerable) |
Позволяет осуществлять параллельный запрос. |
AsQueryable(IEnumerable) |
Преобразовывает коллекцию IEnumerable в объект IQueryable. |
Применяется к
Потокобезопасность
Открытые статические (Shared
в Visual Basic) члены этого типа являются потокобезопасными. Потокобезопасная работа с членами экземпляров типа не гарантируется.
Объект SortedList может одновременно поддерживать несколько модулей чтения, если коллекция не изменяется. Чтобы гарантировать потокобезопасность SortedList, все операции должны выполняться через оболочку, возвращаемую методом Synchronized(SortedList) .
Перечисление коллекции не является потокобезопасной процедурой. Даже если коллекция синхронизирована, другие потоки могут ее изменить, что приведет к тому, что перечислитель создаст исключение. Для обеспечения потокобезопасности при перечислении можно либо заблокировать коллекцию на все время перечисления, либо перехватывать исключения, возникающие в результате изменений, внесенных другими потоками.