PatternsCSharpProgramming/Patterns/Dict/Program.cs
Dvurechensky 3a28caed27 1.0
Main
2024-10-05 09:15:54 +03:00

116 lines
4.8 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Specialized;
using System.Diagnostics;
class Program
{
/// <summary>
/// Стандартный Dictionary
/// Быстрый поиск с помощью ключей, можно добавлять и удалять элементы
/// </summary>
private static readonly Dictionary<string, object> Dictionary = new();
/// <summary>
/// ListDictionary
/// Он меньше и быстрее, чем Hashtable если количество элементов равно 10 или меньше
/// </summary>
private static readonly ListDictionary LDictionary = new()
{
{ "key", "value"}
};
/// <summary>
/// HybridDictionary
/// Рекомендуется для случаев, когда количество элементов в словаре неизвестно.
/// Он использует улучшенную производительность ListDictionary с небольшими коллекциями
/// и предлагает гибкость переключения на Hashtable , которая обрабатывает большие коллекции лучше
/// </summary>
private static readonly HybridDictionary HDictionary = new()
{
{ "key", "value"}
};
/// <summary>
/// OrderedDictionary
/// Он всегда упорядочен при выводе foreach
/// Ключ не может быть нулевым , но значение может быть.
/// Каждый элемент представляет собой пару ключ/значение, хранящуюся в объекте DictionaryEntry
/// Доступ к элементам возможен либо по ключу, либо по индексу.
/// [!]
/// если элементов больше 20-ти быстрее при цикле for
/// если элементов меньше 15-20 быстрее в foreach чем for
/// </summary>
private static readonly OrderedDictionary ODictionary = new()
{
{"01", "odin"},
{"02", "dva"},
{"03", "tri"},
{"04", "chetiri"},
{"06", "pyat"},
{"07", "pyat"},
{"08", "pyat"},
{"09", "pyat"},
{"10", "pyat"},
{"11", "pyat"},
{"12", "pyat"},
{"13", "pyat"},
{"14", "pyat"},
{"15", "pyat"},
{"16", "pyat"},
{"17", "pyat"},
{"18", "pyat"},
{"19", "pyat"},
{"20", "pyat"},
{"21", "pyat"},
{"22", "pyat"},
{"23", "pyat"},
{"24", "pyat"},
{"25", "pyat"},
{"26", "pyat"},
{"27", "pyat"},
{"28", "pyat"},
{"29", "pyat"},
{"30", "pyat"},
{"31", "pyat"}
};
/// <summary>
/// SortedDictionary
/// Дерево бинарного поиска, в котором все элементы отсортированы на основе ключа
/// Быстрее вставляет и удаляет элементы
/// </summary>
private static readonly SortedDictionary<int, string> SDictionary = new();
/// <summary>
/// ConcurrentDictionary
/// Потокобезопасная коллекция пар "ключ-значение", доступ к которой могут одновременно получать несколько потоков.
/// по умолчанию 4 потока на запись concurrencyLevel = 4
/// первоначальное число элементов 31 сapacity = 31
/// В отличие от обычного Dictionary, можно производить вставку в ConcurrentDictionary или удаление из него прямо во время перечисления
/// </summary>
private static readonly ConcurrentDictionary<int, string> СoncurrentDictionary = new();
static void Main()
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
for(int i = 0; i < ODictionary.Count; i++)
{
string val = (string)ODictionary[i];
Console.WriteLine(val);
}
stopwatch.Stop();
Console.WriteLine("[for][el > 20]: " + stopwatch.Elapsed);
stopwatch.Reset();
stopwatch.Start();
foreach (DictionaryEntry item in ODictionary)
{
Console.WriteLine(item.Value);
}
stopwatch.Stop();
Console.WriteLine("[foreach][el > 20]: " + stopwatch.Elapsed);
Console.ReadKey();
}
}