/// <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);
        }
示例#2
0
        /// <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);
        }