public Tuple <Model.HashTable, long> GetHashTableAndTime(string path)
 {
     using (var streamReader = new StreamReader(path, Encoding.Default))
     {
         string    line;
         int       countWords = 0;
         var       allWords   = new List <string>();
         Stopwatch stopwatch  = new Stopwatch();
         while ((line = streamReader.ReadLine()) != null)
         {
             allWords.Add(line);
             countWords++;
         }
         var hashTable = new Model.HashTable(countWords * 10);
         stopwatch.Start();
         for (int i = 0; i < countWords; i += 2)
         {
             hashTable.Insert(new Word(allWords[i], allWords[i + 1]));
         }
         stopwatch.Stop();
         return(Tuple.Create(hashTable, stopwatch.ElapsedMilliseconds));
     }
 }
        public ViewModelHash()
        {
            HashTable = new MassiveWords().GetHashTableAndTime("../../Model/Words.txt").Item1;
            var time = new MassiveWords().GetHashTableAndTime("../../Model/Words.txt").Item2;

            OpHistory = new ObservableCollection <OpHistoryItem>();
            var massiveRussian = new MassiveChars("Russian").GetMassiveChars();
            var massiveEnglish = new MassiveChars("English").GetMassiveChars();

            OpHistory.Add(new OpHistoryItem("Время создания хэш таблицы из " + HashTable.Values.Count() / 20 + " слов - " + time + " ms."));
            mp.Open(new Uri("../../Music/music.mp3", UriKind.RelativeOrAbsolute));
            var flag = false;

            Add = new DelegateCommand(() =>
            {
                var beep = new MediaPlayer();
                beep.Open(new Uri("../../Music/beep.mp3", UriKind.RelativeOrAbsolute));
                beep.Play();
                if (string.IsNullOrWhiteSpace(AddValueF) && !string.IsNullOrWhiteSpace(AddValueS))
                {
                    OpHistory.Add(new OpHistoryItem("Вы не ввели слово на английском, которое хотели добавить!"));
                }
                else if (!string.IsNullOrWhiteSpace(AddValueF) && string.IsNullOrWhiteSpace(AddValueS))
                {
                    OpHistory.Add(new OpHistoryItem("Вы не ввели перевод слова!"));
                }
                else if (string.IsNullOrWhiteSpace(AddValueF) && string.IsNullOrWhiteSpace(AddValueS))
                {
                    OpHistory.Add(new OpHistoryItem("Вы ничего не ввели!"));
                }
                else
                {
                    if (CheckerForEnglishAndRussian(AddValueF.ToCharArray(), AddValueS.ToCharArray()))
                    {
                        var spForAdd = new Stopwatch();
                        if (!HashTable.Search(AddValueF))
                        {
                            spForAdd.Start();
                            HashTable.Insert(new Word(AddValueF, AddValueS));
                            spForAdd.Stop();
                            OpHistory.Add(new OpHistoryItem("Слово \"" + AddValueF + "\" записано в словарь."));
                        }
                        else
                        {
                            spForAdd.Start();
                            HashTable.Remove(AddValueF);
                            HashTable.Insert(new Word(AddValueF, AddValueS));
                            spForAdd.Stop();
                            OpHistory.Add(new OpHistoryItem("Слово \"" + AddValueF + "\" перезаписано."));
                        }
                        OpHistory.Add(new OpHistoryItem("Время добавление/переписывание составило - " + spForAdd.ElapsedTicks + " тиков."));
                        RaisePropertyChanged("OpHistory");
                    }
                    else
                    {
                        OpHistory.Add(new OpHistoryItem("Первое слово должно быть Английским, а второе Русским!"));
                    }
                }
            });
            Delete = new DelegateCommand(() =>
            {
                var beep = new MediaPlayer();
                beep.Open(new Uri("../../Music/beep.mp3", UriKind.RelativeOrAbsolute));
                beep.Play();
                if (string.IsNullOrWhiteSpace(DeleteValue))
                {
                    OpHistory.Add(new OpHistoryItem("Вы ничего не ввели!"));
                }
                else
                {
                    if (CheckerForEnglish(DeleteValue.ToCharArray()))
                    {
                        if (HashTable.Search(DeleteValue))
                        {
                            var spForDelete = new Stopwatch();
                            spForDelete.Start();
                            HashTable.Remove(DeleteValue);
                            spForDelete.Stop();
                            OpHistory.Add(new OpHistoryItem("Слово \"" + DeleteValue + "\" удалено из словаря."));
                            OpHistory.Add(new OpHistoryItem("Время удаления - " + spForDelete.ElapsedTicks + " тиков"));
                        }
                        else
                        {
                            OpHistory.Add(new OpHistoryItem("Слово \"" + DeleteValue + "\" не найдено в словаре."));
                        }
                        RaisePropertyChanged("OpHistory");
                    }
                    else
                    {
                        OpHistory.Add(new OpHistoryItem("Это не английское слово \"" + DeleteValue + "\"."));
                    }
                }
            });
            Translate = new DelegateCommand(() =>
            {
                var beep = new MediaPlayer();
                beep.Open(new Uri("../../Music/beep.mp3", UriKind.RelativeOrAbsolute));
                beep.Play();
                if (string.IsNullOrWhiteSpace(TranslateValue))
                {
                    OpHistory.Add(new OpHistoryItem("Вы ничего не ввели!"));
                }
                else
                {
                    if (CheckerForEnglish(TranslateValue.ToCharArray()))
                    {
                        if (HashTable.Search(TranslateValue))
                        {
                            var spForTranslate = new Stopwatch();
                            spForTranslate.Start();
                            var russianTranslate = HashTable.Search(TranslateValue, out Word w);
                            spForTranslate.Stop();
                            OpHistory.Add(new OpHistoryItem("Перевод слова " + TranslateValue + " - " + w.Value));
                            OpHistory.Add(new OpHistoryItem("Время перевода - " + spForTranslate.ElapsedTicks + " тиков."));
                        }
                        else
                        {
                            OpHistory.Add(new OpHistoryItem("Слово \"" + TranslateValue + "\" не найдено в словаре."));
                        }
                        RaisePropertyChanged("OpHistory");
                    }
                    else
                    {
                        OpHistory.Add(new OpHistoryItem("Это не английское слово \"" + TranslateValue + "\"."));
                    }
                }
            });
            PlayMusic = new DelegateCommand(() =>
            {
                if (!flag)
                {
                    mp.Play();
                    flag = true;
                }
                else
                {
                    mp.Pause();
                    flag = false;
                }
            });
            HashTable.Search("apple", out Word wo);
            HashTable.Search("apple", out wo);
            HashTable.Remove("warm");
            HashTable.Remove("yourself");
            HashTable.Insert(new Word("Test", "Тест"));
        }