Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция9.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
130.56 Кб
Скачать

Типы коллекций

Много общих коллекций предоставляются платформой .NET Framework. Каждый тип коллекции предназначен для особой целью.

Следующие группы в составе классы коллекций, описанных в этом разделе:

  • Классы System.Collections.Generic

  • Классы System.Collections.Concurrent

  • Классы System.Collections

  • Класс Collection Visual Basic

Можно создать родовая коллекцию с помощью одного из классов в пространстве имен System.Collections.Generic. Универсальная коллекция применяется в том случае, если все элементы в коллекции имеют одинаковый тип данных. Родовая коллекция принудительно строгая типизация, включив только необходимый тип данных для добавления.

В следующей таблице перечислены некоторые из часто используемых классов пространства имен System.Collections.Generic:

Дополнительные сведения см. в описаниях Часто используемые типы коллекций, Выбор класса коллекции и System.Collections.Generic.

Классы System.Collections.Concurrent

В платформе .NET Framework 4 коллекций в пространстве имен System.Collections.Concurrent предоставляют эффективные потокобезопасные операции для доступа к элементам коллекции из нескольких потоков.

Классы в пространстве имен System.Collections.Concurrent должны использоваться вместо соответствующих типов в System.Collections.Generic и пространства имен System.Collections, когда несколько потоков обращаются к коллекции одновременно. Дополнительные сведения см. в разделах Потокобезопасные коллекции и System.Collections.Concurrent.

Некоторые классы, включенные в пространстве имен System.Collections.ConcurrentBlockingCollection<T>, ConcurrentDictionary<TKey, TValue>, ConcurrentQueue<T> и ConcurrentStack<T>.

Классы System.Collections

Классы в пространстве имен System.Collections не хранят элементы в виде конкретно типизированных объектов, а хранят их как объекты типа Object.

При возможности следует использовать родовые коллекций в пространстве имен System.Collections.Generic или пространстве имен System.Collections.Concurrent вместо устаревших типов в пространстве имен System.Collections.

В следующей таблице перечислены некоторые из часто используемых классов в пространстве имен System.Collections:

Пространство имен System.Collections.Specialized предоставляет специализированные строго типизированные классы коллекций, такие как коллекции строк, связанные списки и гибридные словари.

Реализация коллекцию клавиши " ключ-значение "

Коллекция Dictionary<TKey, TValue> родовая позволяет получить доступ к элементам коллекции с помощью клавиши каждого элемента. Каждый элемент, добавляемый словарь, состоит из значения и связанного с ним ключа. Извлечение значения с помощью его клавиши быстрого поскольку класс Dictionary реализован как хэш-таблицы.

В следующем примере создается коллекция Dictionary и последовательно перебирает словарь с помощью выписки For Each.

private void IterateThruDictionary()

{

Dictionary<string, Element> elements = BuildDictionary();

foreach (KeyValuePair<string, Element> kvp in elements)

{

Element theElement = kvp.Value;

Console.WriteLine("key: " + kvp.Key);

Console.WriteLine("values: " + theElement.Symbol + " " +

theElement.Name + " " + theElement.AtomicNumber);

}

}

private Dictionary<string, Element> BuildDictionary()

{

var elements = new Dictionary<string, Element>();

AddToDictionary(elements, "K", "Potassium", 19);

AddToDictionary(elements, "Ca", "Calcium", 20);

AddToDictionary(elements, "Sc", "Scandium", 21);

AddToDictionary(elements, "Ti", "Titanium", 22);

return elements;

}

private void AddToDictionary(Dictionary<string, Element> elements,

string symbol, string name, int atomicNumber)

{

Element theElement = new Element();

theElement.Symbol = symbol;

theElement.Name = name;

theElement.AtomicNumber = atomicNumber;

elements.Add(key: theElement.Symbol, value: theElement);

}

public class Element

{

public string Symbol { get; set; }

public string Name { get; set; }

public int AtomicNumber { get; set; }

}

Вместо того, чтобы использовать инициализатор набора для построения коллекцию Dictionary, можно заменить методы BuildDictionary и AddToDictionary следующим приемом.

private Dictionary<string, Element> BuildDictionary2()

{

return new Dictionary<string, Element>

{

{"K",

new Element() { Symbol="K", Name="Potassium", AtomicNumber=19}},

{"Ca",

new Element() { Symbol="Ca", Name="Calcium", AtomicNumber=20}},

{"Sc",

new Element() { Symbol="Sc", Name="Scandium", AtomicNumber=21}},

{"Ti",

new Element() { Symbol="Ti", Name="Titanium", AtomicNumber=22}}

};

}

В следующем примере используется метод ContainsKey, а свойство ItemDictionary, чтобы быстро найти элемент клавиша. Свойство Item позволяет получить доступ к элементу в коллекции elements с помощью кода elements(symbol) в Visual Basic или в C# elements[symbol].

private void FindInDictionary(string symbol)

{

Dictionary<string, Element> elements = BuildDictionary();

if (elements.ContainsKey(symbol) == false)

{

Console.WriteLine(symbol + " not found");

}

else

{

Element theElement = elements[symbol];

Console.WriteLine("found: " + theElement.Name);

}

}

В следующем примере рекомендуется использовать метод TryGetValue клавиша быстрого находит элемент.

private void FindInDictionary2(string symbol)

{

Dictionary<string, Element> elements = BuildDictionary();

Element theElement = null;

if (elements.TryGetValue(symbol, out theElement) == false)

Console.WriteLine(symbol + " not found");

else

Console.WriteLine("found: " + theElement.Name);

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]