Коллекция Dictionary в C#


Кроме того, класс содержит три собственных свойства



Download 36,75 Kb.
bet3/4
Sana02.03.2022
Hajmi36,75 Kb.
#478569
TuriСамостоятельная работа
1   2   3   4
Bog'liq
Усаров Ш АТ

Кроме того, класс содержит три собственных свойства:

  • Values – возвращает значение из структуры элемента;

  • Keys – возвращает ключ;

  • Comparer – указывает компаратор (метод сравнения);

Для автоматического добавления новых пар в коллекцию в классе предусмотрен индексатор. Но работает он не на основе индекса, а на основе ключа. Вот его сигнатура:
public TValue this[TKey] { get; set;}
При использовании он работает с парами значение/ключ как со структурой KeyValuePair.
Использование свойств и методов класса демонстрируется в следующем примере:
using System;
using System.Collections.Generic;

public class DictionaryExample
{
public static void Main()
{
// Создаем коллекцию из пар ключ/значение – оба типа string.
Dictionary<string, string> FileAssos =
new Dictionary<string, string>();
// Добавляем элементы в коллекцию.
FileAssos.Add("txt", "notepad.exe");
FileAssos.Add("rar", "winrar.exe");
FileAssos.Add("jpg", "photoshop.exe");
FileAssos.Add("docx", "winword.exe");

// Следующая строка кода вызовет исключение. Поскольку с ключом rar ассоциировано значение winrar.

try
{
FileAssos.Add("rar", "winzip.exe");
}
catch (ArgumentException)
{
Console.WriteLine("Элемент с ключом = \"rar\" уже присутствует в коллекции.");
}

// Получаем доступ через индексатор.
Console.WriteLine("Для ключа = \"jpg\", значение = {0}.",
FileAssos["jpg"]);

// Используем индексатор для изменения значения в ассоциированной с ключом.
FileAssos["jpg"] = "Paint.exe";
Console.WriteLine("Для ключа= \"jpg\", значение = {0}.",
FileAssos["jpg"]);

// используем индексатор для добавления нового значения элемента коллекции, в виде структуры KeyValuePair.
FileAssos["cfg"] = "cfgreader.exe";

// С помощью индексатора обращаемся к коллекции по несуществующему ключу. Будет сгенерировано исключение.
try
{
Console.WriteLine("Для ключа = \"xls\", значение = {0}.",
FileAssos["xls"]);
}
catch (KeyNotFoundException)
{
Console.WriteLine("Ключ = \"xls\" не был найден в коллекции.");
}

// Получаем значение из структуры KeyValuePair по ключу с помощью метода TryGetValue.
string value = "";
if (FileAssos.TryGetValue("xls", out value))
{
Console.WriteLine("Для ключа = \"xls\", значение = {0}.", value);
}
else
{
Console.WriteLine("Ключ = \"xls\" не найден.");
}

// Чтобы проверить вхождение ключа в коллекцию перед добавлением, следует использовать метод ContainsKey.
if (!FileAssos.ContainsKey("ht"))
{
FileAssos.Add("mp3", "aimp.exe");
Console.WriteLine("Значение добавлено по ключу = \"mp3\": {0}",
FileAssos["mp3"]);
}

// При использовании конструкции foreach для перебора элементов словаря в качестве обьектов используется структура KeyValuePair.
Console.WriteLine();
foreach( KeyValuePair<string, string> element in FileAssos )
{
Console.WriteLine("Ключ = {0}, Значение = {1}",
element.Key, element.Value);
}

// Чтобы получить список всех значений коллекции нужно использовать свойство Values.
Dictionary<string, string>.ValueCollection TempvaluesColl =
FileAssos.Values;

Console.WriteLine();
foreach( string str in TempvaluesColl )
{
Console.WriteLine("Все значения из словаря: {0}", str);
}

// Чтобы получить список всех ключей коллекции нужно использовать свойство Keys.
Dictionary<string, string>.KeyCollection TempkeysColl =
FileAssos.Keys;

Console.WriteLine();
foreach( string str in TempkeysColl )
{
Console.WriteLine("Ключ = {0}", str);
}

// Используем метод Remove для удаления элемента по ключу.
Console.WriteLine("\nУдаляем(\"rar\")");
FileAssos.Remove("rar");

if (!FileAssos.ContainsKey("rar"))
{
Console.WriteLine("Ключ \"rar\" не найден.");
}
}
}

Еще один распространенный тип коллекции представляют словари. Словарь хранит объекты, которые представляют пару ключ-значение. Каждый такой объект является объектом структуры KeyValuePair. Благодаря свойствам Key и Value, которые есть у данной структуры, мы можем получить ключ и значение элемента в словаре.


Рассмотрим на примере использование словарей:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

Dictionary countries = new Dictionary(5);
countries.Add(1, "Russia");
countries.Add(3, "Great Britain");
countries.Add(2, "USA");
countries.Add(4, "France");
countries.Add(5, "China");
foreach (KeyValuePair keyValue in countries)
{
Console.WriteLine(keyValue.Key + " - " + keyValue.Value);
}
// получение элемента по ключу
string country = countries[4];
// изменение объекта
countries[4] = "Spain";
// удаление по ключу
countries.Remove(2);

Класс словарей также, как и другие коллекции, предоставляет методы Add и Remove для добавления и удаления элементов. Только в случае словарей в метод Add передаются два параметра: ключ и значение. А метод Remove удаляет не по индексу, а по ключу.
Так как в нашем примере ключами является объекты типа int, а значениями - объекты типа string, то словарь в нашем случае будет хранить объекты KeyValuePair. В цикле foreach мы их можем получить и извлечь из них ключ и значение.
Кроме того, мы можем получить отдельно коллекции ключей и значений словаря:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

Dictionary people = new Dictionary();
people.Add('b', new Person() { Name = "Bill" });
people.Add('t', new Person() { Name = "Tom" });
people.Add('j', new Person() { Name = "John" });
foreach (KeyValuePair keyValue in people)
{
// keyValue.Value представляет класс Person
Console.WriteLine(keyValue.Key + " - " + keyValue.Value.Name);
}
// перебор ключей
foreach (char c in people.Keys)
{
Console.WriteLine(c);
}
// перебор по значениям
foreach (Person p in people.Values)
{
Console.WriteLine(p.Name);
}

Здесь в качестве ключей выступают объекты типа char, а значениями - объекты Person. Используя свойство Keys, мы можем получить ключи словаря, а свойство Values соответственно хранит все значения в словаре.
Для добавления необязательно применять метод Add(), можно использовать сокращенный вариант:

1
2
3

Dictionary people = new Dictionary();
people.Add('b', new Person() { Name = "Bill" });
people['a'] = new Person() { Name = "Alice" };

Несмотря на то, что изначально в словаре нет ключа 'a' и соответствующего ему элемента, то он все равно будет установлен. Если же он есть, то элемент по ключу 'a' будет заменен на новый объект new Person() { Name = "Alice" }

Download 36,75 Kb.

Do'stlaringiz bilan baham:
1   2   3   4




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish