/// <summary> /// Хэширование по одинаковым Авторам в пределах сгенерированных групп книг по одинаковым названиям /// </summary /// <param name="bw">Экземплар фонового обработчика класса BackgroundWorker</param> /// <param name="e">Экземпляр класса DoWorkEventArgs</param> /// <param name="htFB2ForBT">Заполненная хеш-таблица списками книг по критерию одинакового Названия книг</param> /// <param name="htBookTitleAuthors">Заполняемая хеш-таблица списками книг по критерию ( Название книги (Авторы) )</param> /// <param name="WithMiddleName">Учитывать ли отчество Авторов (true) или нет (false) при поиске</param> /// <returns>Признак непрерывности обработки файлов</returns> public bool FilesHashForAuthorsParser(BackgroundWorker bw, DoWorkEventArgs e, Label StatusLabel, ProgressBar ProgressBar, HashtableClass htFB2ForBT, HashtableClass htBookTitleAuthors, bool WithMiddleName) { StatusLabel.Text += "Хеширование по Авторам книг...\r"; ProgressBar.Maximum = htFB2ForBT.Values.Count; ProgressBar.Value = 0; // генерация списка ключей хеш-таблицы (для удаления обработанного элемента таблицы) List <string> keyList = _compComm.makeSortedKeysForGroups(htFB2ForBT); // группировка книг по одинаковым Авторам в пределах сгенерированных Групп книг по одинаковым Названиям int i = 0; foreach (string key in keyList) { // разбивка на группы для одинакового Названия по Авторам Hashtable htGroupAuthors = FindDupForAuthors((FB2FilesDataInGroup)htFB2ForBT[key], WithMiddleName); foreach (FB2FilesDataInGroup fb2List in htGroupAuthors.Values) { if (!htBookTitleAuthors.ContainsKey(fb2List.Group)) { htBookTitleAuthors.Add(fb2List.Group, fb2List); } else { FB2FilesDataInGroup fb2ListInGroup = (FB2FilesDataInGroup)htBookTitleAuthors[fb2List.Group]; fb2ListInGroup.AddRange(fb2List); } } // удаление обработанной группы книг, сгруппированных по одинаковому названию htFB2ForBT.Remove(key); bw.ReportProgress(++i); if (bw.CancellationPending) { e.Cancel = true; return(false); } } return(true); }
/// <summary> /// Хэширование fb2-файлов по ID книги в пределах одинаковых Авторов Книги /// 10. Автор(ы), Одинаковый Id Книги /// </summary /// <param name="bw">Экземплар фонового обработчика класса BackgroundWorker</param> /// <param name="e">Экземпляр класса DoWorkEventArgs</param> /// <param name="htAuthors">Хэш Таблица с книгами по критерию одинаковости их Авторов</param> /// <param name="htWorkingBook">Хэш Таблица с книгами по критерию одинаковости их ID</param> /// <returns>Признак непрерывности обработки файлов</returns> public bool FilesHashForAuthorsBookIDParser(ref BackgroundWorker bw, ref DoWorkEventArgs e, Label StatusLabel, ProgressBar ProgressBar, ref HashtableClass htBookTitleAuthors, ref HashtableClass htWorkingBook) { StatusLabel.Text += "Хэширование по ID книги в пределах одинаковых Авторов...\r"; ProgressBar.Maximum = htBookTitleAuthors.Count; ProgressBar.Value = 0; // генерация списка ключей хеш-таблицы (для удаления обработанного элемента таблицы) List <string> keyList = _compComm.makeSortedKeysForGroups(htBookTitleAuthors); // группировка книг по одинаковым Id Книги в пределах сгенерированных Групп книг одинаковых Авторов int i = 0; foreach (string key in keyList) { // разбивка на группы для одинакового Id книги по Названию и по Авторам Hashtable AuthorsTitleBookID = FindDupForAuthorsID((FB2FilesDataInGroup)htBookTitleAuthors[key]); foreach (FB2FilesDataInGroup fb2List in AuthorsTitleBookID.Values) { if (!htBookTitleAuthors.ContainsKey(fb2List.Group)) { htWorkingBook.Add(fb2List.Group, fb2List); } else { FB2FilesDataInGroup fb2ListInGroup = (FB2FilesDataInGroup)htBookTitleAuthors[fb2List.Group]; fb2ListInGroup.AddRange(fb2List); } } // удаление обработанной группы книг, сгруппированных по одинаковому Автору htBookTitleAuthors.Remove(key); bw.ReportProgress(++i); if (bw.CancellationPending) { e.Cancel = true; return(false); } } return(true); }