Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритми та структури даних ЗПІ-91-20210115T104612Z-001 / Лекція 8. Хеш таблиці і словники.docx
Скачиваний:
27
Добавлен:
15.01.2021
Размер:
96.48 Кб
Скачать

Приклад 5. Частотний словник

using System;

using System.Collections.Generic;

namespace Lab8_Dictionary

{

//Створення частотного словника

class Program

{

static void Main(string[] args)

{

//вхідний текст

string inputText = "У наступному прикладі коду створюється порожній об'єкт " +

"Dictionary<TKey, TValue> рядків із строковими ключами і використовується метод Add " +

"для додавання декількох елементів. Як видно з прикладу, метод Add видає виключення" +

"ArgumentException при спробі додати дублікат ключа.";

//розбиваємо текст на слова і записуємо в масив

string[] masSt = inputText.Split(new char[] { ' ', '.', ',' },

StringSplitOptions.RemoveEmptyEntries);

//Key - слово в тексті, Value - кількість повторень

Dictionary<string, int> freqDict = new Dictionary<string, int>(); //словник

//В циклі вибираємо кожне слово в масиві, приводимо всі слова до нижнього регістру,

//перевіряємо, чи таке вже є. Якщо слово вже є у словнику, збільшуємо лічильник

foreach (string s in masSt)

if (freqDict.ContainsKey(s.ToLower()))

{ freqDict[s.ToLower()]++; }

else freqDict.Add(s.ToLower(), 1);

// виведення словника

Console.WriteLine("Слово Частота ");

foreach (KeyValuePair<string, int> kvp in freqDict)

{

Console.WriteLine("{0}, {1}", kvp.Key, kvp.Value);

}

Console.ReadKey();

}

}

}

Результат:

Для того, щоб відсортувати слова у словнику, потрібно використати метод OrderBy:

namespace Zavd_3

{

class Program

{

//Створення частотного словника

static void Main(string[] args)

{

//вхідний текст

string inputText = "У наступному прикладі коду створюється порожній об'єкт " +

"Dictionary<TKey, TValue> рядків із строковими ключами і використовується метод Add " +

"для додавання декількох елементів. Як видно з прикладу, метод Add видає виключення" +

"ArgumentException при спробі додати дублікат ключа.";

//розбиваємо текст на слова і записуємо в масив

string[] masSt = inputText.Split(new char[] { ' ', '.', ',' },

StringSplitOptions.RemoveEmptyEntries);

//Key - слово в тексті, Value - кількість повторень

Dictionary<string, int> freqDict = new Dictionary<string, int>();

//В циклі вибираємо кожне слово в масиві, приводимо всі слова до нижнього регістру,

//перевіряємо, чи таке вже є. Якщо слово вже є у словнику, збільшуємо лічильник

foreach (string s in masSt)

if (freqDict.ContainsKey(s.ToLower()))

{ freqDict[s.ToLower()]++; }

else freqDict.Add(s.ToLower(), 1);

var result = freqDict.OrderBy(i => i.Key);

// виведення словника

Console.WriteLine("Слово Частота ");

foreach (KeyValuePair<string, int> kvp in result)

{

Console.WriteLine("{0}, {1}", kvp.Key, kvp.Value);

}

Console.ReadKey();

}

}

}

8.3. Клас SortedDictionary<TKey, TValue> - відсортований словник

У колекції класу SortedDictionary<TKey, TValue> пари "ключ-значення" зберігаються так само, як і в колекції класу Dictionary<TKey, TValue>, за винятком того, що вони відсортовані за відповідним ключем.

У класі SortedDictionary<TKey, TValue> реалізуються інтерфейси IDictionary, IDictionary<TKey, TValue>, ICollection, ICollection<KeyValuePair<TKey, TValue", IEnumerable і IEnumerable<KeyValuePair<TKey, TValue".

Клас SortedDictionary<TKey, TValue> подібний до класу SortedList<TKey, TValue>, але у нього інші робочі характеристики.

Зокрема, клас SortedList<TKey, TValue> використовує менше пам'яті, тоді як клас SortedDictionary<TKey, TValue> дозволяє швидше вставляти невідсортовані елементи в колекцію.

Усі ключі в колекції типу SortedDictionary<TKey, TValue> мають бути унікальними, причому ключ не повинен змінюватися до тих пір, поки він служить як ключ. В той же час значення не обов'язково мають бути унікальними.