Приклад 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> мають бути унікальними, причому ключ не повинен змінюватися до тих пір, поки він служить як ключ. В той же час значення не обов'язково мають бути унікальними.