C # dictionary

Універсальний клас Dictionary забезпечує відображення безлічі ключів в безліч значень. Кожен елемент, що додається до словника, складається з значення і пов'язаного з ним ключа. Витяг значення по його ключу відбувається дуже швидко, зі швидкістю, близькою до O (1), оскільки клас Dictionary реалізований як хеш-таблиця.

Поки об'єкт використовується в якості ключа в словнику Dictionary. він не повинен змінюватися так, щоб це відбивалося на його хеш-коді. Кожен ключ в словнику Dictionary повинен бути унікальним відповідно до компаратором словника, перевіряючим на рівність. Ключ не може бути порожнім (null), а значення може, якщо тип значення TValue є посилальним типом.

Dictionary вимагає реалізації перевірки рівності, що дозволить визначати, чи збігаються ключі. Можна задати реалізацію універсального інтерфейсу IEqualityComparer. використовуючи конструктор, що приймає параметр comparer; якщо реалізація не задана, використовується універсальний компаратор за замовчуванням, перевіряючий на рівність (EqualityComparer .Default). Якщо тип TKey реалізує універсальний інтерфейс System.IEquatable. компаратор за замовчуванням, перевіряючий на рівність, використовує цю реалізацію.

Ємність колекції Dictionary - це кількість елементів, яке може вмістити Dictionary. При додаванні елементів в колекцію Dictionary її ємність автоматично збільшується потрібним чином за рахунок перерозподілу внутрішнього масиву.

Для дуже великих об'єктів Dictionary. можна збільшити максимальну ємність до 2 мільярдів елементи на 64 розрядної системі, встановивши атрибут enabled елемента конфігурації gcAllowVeryLargeObjects на true середовища виконання.

Для оператора foreach мови C # (for each в C ++, For Each в Visual Basic) необхідно вказувати тип кожного елемента колекції. Оскільки Dictionary являє собою сукупність ключів і значень, тут тип елемента - це не тип ключа і не тип значення. Ці елементи відносяться до типу KeyValuePair. який представляє пару з типу ключа і типу значення. наприклад:

Оператор foreach є оболонкою перечіслітеля, що допускає тільки читання з колекції, але не запис в неї.

У наступному прикладі коду створюється порожній об'єкт Dictionary рядків із строковими ключами і використовується метод Add для додавання кількох елементів. Як видно з прикладу, метод Add видає виключення ArgumentException при спробі додати дублікат ключа.

У прикладі для вилучення значень використовується властивість Item (індексатор в C #); при відсутності запитуваної ключа видається виключення KeyNotFoundException, причому значення, пов'язане з ключем, можна замінити.

У прикладі показано використання методу TryGetValue як більш ефективний спосіб вилучення значень в програмі, часто намагається використовувати значення ключів, відсутні в словнику, а також демонструється застосування методу ContainsKey для перевірки існування ключа перед викликом методу Add.

І на закінчення в прикладі демонструється використання методу Remove.

Про версію

NET Framework Підтримується в версіях: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0 .NET Framework (клієнтський профіль) Підтримується в версіях: 4, 3.5 з пакетом оновлень 1 (SP1) Стерпна бібліотека класів Підтримується у версії : Стерпна бібліотека класів Додатки .NET для Магазину Windows Підтримується у версії: Windows 8 Додатки .NET для Windows Phone Підтримується в версіях: Windows Phone 8, Silverlight 8.1

Більш повна інформація про Dictionary тут