/// <summary> /// Разбивка на группы для одинакового Id книги по Авторам /// </summary /// <param name="bw">Экземпляр фонового обработчика класса BackgroundWorker</param> /// <param name="e">Экземпляр класса DoWorkEventArgs</param> /// <param name="fb2Group">Экземпляр класса для хранения информации по одинаковым книгам в одной группе</param> private Hashtable FindDupForAuthorsID(FB2FilesDataInGroup fb2Group) { // в fb2Group.Group - название группы (название книги у всех книг одинаковое, а пути - разные ) // внутри fb2Group в BookData - данные на каждую книгу группы Hashtable ht = new Hashtable(new FB2CultureComparer()); // 2 итератора для перебора всех книг группы. 1-й - только на текущий элемент группы, 2-й - скользящий на все последующие. т.е. iter2 = iter1+1 for (int iter1 = 0; iter1 != fb2Group.Count; ++iter1) { BookData bd1 = fb2Group[iter1]; // текущая книга FB2FilesDataInGroup fb2NewGroup = new FB2FilesDataInGroup(); // перебор всех книг в группе, за исключением текущей for (int iter2 = iter1 + 1; iter2 != fb2Group.Count; ++iter2) { // сравнение текущей книги со всеми последующими BookData bd2 = fb2Group[iter2]; // Проверка ID книги на наличие и/или пустоту _compComm.VerifyBookID(bd1); _compComm.VerifyBookID(bd2); if (bd1.Id.ToLower().Equals(bd2.Id.ToLower())) { if (!fb2NewGroup.isBookExists(bd2.Path)) { fb2NewGroup.Add(bd2); } } } if (fb2NewGroup.Count >= 1) { // только для копий, а не для единичных книг fb2NewGroup.Group = fb2Group.Group + " { " + bd1.Id.ToString() + " }"; fb2NewGroup.Insert(0, bd1); if (!ht.ContainsKey(fb2NewGroup.Group)) { ht.Add(fb2NewGroup.Group, fb2NewGroup); } } } return(ht); }
/// <summary> /// Cоздание групп копий по Авторам, относительно найденного Названия Книги /// </summary /// <param name="fb2Group">Экземпляр класса для хранения информации по одинаковым книгам в одной группе</param> /// <param name="WithMiddleName">Учитывать ли отчество Авторов (true) или нет (false) при поиске</param> private Hashtable FindDupForAuthors(FB2FilesDataInGroup fb2Group, bool WithMiddleName) { // в fb2Group.Group - название группы (название книги у всех книг одинаковое, а пути - разные ) // внутри fb2Group в BookData - данные на каждую книгу группы Hashtable ht = new Hashtable(new FB2CultureComparer()); // 2 итератора для перебора всех книг группы. 1-й - только на текущий элемент группы, 2-й - скользящий на все последующие. т.е. iter2 = iter1+1 for (int iter1 = 0; iter1 != fb2Group.Count; ++iter1) { BookData bd1 = fb2Group[iter1]; // текущая книга FB2FilesDataInGroup fb2NewGroup = new FB2FilesDataInGroup(); // перебор всех книг в группе, за исключением текущей for (int iter2 = iter1 + 1; iter2 != fb2Group.Count; ++iter2) { // сравнение текущей книги со всеми последующими BookData bd2 = fb2Group[iter2]; if (bd1.isSameBook(bd2, WithMiddleName, false)) { if (!fb2NewGroup.isBookExists(bd2.Path)) { fb2NewGroup.Add(bd2); } } } if (fb2NewGroup.Count >= 1) { // только для копий, а не для единичных книг fb2NewGroup.Group = fb2Group.Group + " ( " + fb2NewGroup.makeAuthorsString(WithMiddleName, false) + " )"; fb2NewGroup.Insert(0, bd1); if (!ht.ContainsKey(fb2NewGroup.Group)) { ht.Add(fb2NewGroup.Group, fb2NewGroup); } } } return(ht); }