Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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

Много общих коллекций предоставляются платформой.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);

}

<== предыдущая лекция | следующая лекция ==>
Использование простую коллекцию | Сортировка коллекция
Поделиться с друзьями:


Дата добавления: 2014-01-14; Просмотров: 413; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.015 сек.