Поделиться через


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;
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 элементу можно получить доступ по ключу, например к элементу в любой реализации или по его индексу, например к элементу в любой IDictionaryIList реализации.

Это важно

Мы не рекомендуем использовать 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 Рассмотрим пример.

foreach (DictionaryEntry de in mySortedList)
{
    //...
}
For Each de As DictionaryEntry In mySortedList
    '...
Next de

Оператор foreach представляет собой оболочку вокруг перечислителя, которая позволяет только считывать данные, а не записывать в коллекцию.

Конструкторы

Имя Описание
SortedList()

Инициализирует новый экземпляр SortedList класса, который пуст, имеет начальную емкость по умолчанию и сортируется в соответствии IComparable с интерфейсом, реализованным каждым ключом, добавленным в SortedList объект.

SortedList(IComparer, Int32)

Инициализирует новый экземпляр SortedList класса, который пуст, имеет указанную начальную емкость и сортируется в соответствии с указанным IComparer интерфейсом.

SortedList(IComparer)

Инициализирует новый экземпляр SortedList класса, который является пустым, имеет начальную емкость по умолчанию и сортируется в соответствии с указанным IComparer интерфейсом.

SortedList(IDictionary, IComparer)

Инициализирует новый экземпляр SortedList класса, который содержит элементы, скопированные из указанного словаря, имеет ту же начальную емкость, что и количество скопированных элементов и сортируется в соответствии с указанным IComparer интерфейсом.

SortedList(IDictionary)

Инициализирует новый экземпляр SortedList класса, который содержит элементы, скопированные из указанного словаря, имеет ту же начальную емкость, что и количество скопированных элементов и сортируется в соответствии с IComparable интерфейсом, реализованным каждым ключом.

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.

Методы расширения

Имя Описание
AsParallel(IEnumerable)

Включает параллелизацию запроса.

AsQueryable(IEnumerable)

Преобразует IEnumerable в IQueryable.

Cast<TResult>(IEnumerable)

Приведение элементов IEnumerable к указанному типу.

OfType<TResult>(IEnumerable)

Фильтрует элементы IEnumerable на основе указанного типа.

Применяется к

Потокобезопасность

Общедоступные статические (Shared в Visual Basic) элементы этого типа являются потокобезопасны. Никакие члены экземпляра не гарантированы как потокобезопасные.

Объект SortedList может одновременно поддерживать несколько читателей, если коллекция не изменяется. Чтобы гарантировать безопасность SortedListпотока, все операции должны выполняться с помощью оболочки, возвращаемой методом Synchronized(SortedList) .

Перечисление через коллекцию по сути не является потокобезопасной процедурой. Даже если коллекция синхронизирована, другие потоки по-прежнему могут изменять коллекцию, что приводит к возникновению исключения перечислителем. Чтобы гарантировать безопасность потоков во время перечисления, можно заблокировать коллекцию во время всего перечисления или поймать исключения, полученные из изменений, внесенных другими потоками.

См. также раздел