Beispiel #1
0
 public static bool IsHumanEqual(SHuman human, SHuman human0)
 {
     return((human.Firstname == human0.Firstname || human.Surname == human0.Surname ||
             human.Patronymic == human0.Patronymic || human.Year == human0.Year) &&
            !(human.Firstname == human0.Firstname && human.Surname == human0.Surname &&
              human.Patronymic == human0.Patronymic && human.Year == human0.Year));
 }
        private static bool GroupHasSimilar(List <SHuman> group, SHuman human)
        {
            foreach (SHuman humanToCompare in group)
            {
                bool similar = humanToCompare.Firstname.Equals(human.Firstname);
                similar |= humanToCompare.Surname.Equals(human.Surname);
                similar |= humanToCompare.Patronymic.Equals(human.Patronymic);
                similar |= humanToCompare.Year == human.Year;
                if (similar)
                {
                    return(true);
                }
            }

            return(false);
        }
        private static List <List <SHuman> > FindSimilar(SHuman[] humans)
        {
            List <List <SHuman> > groups = new List <List <SHuman> >
            {
                new List <SHuman>()
                {
                    humans[0]
                }
            };

            for (int i = 1; i < humans.Length; i++)
            {
                SHuman        human         = humans[i];
                List <SHuman> selectedGroup = null;

                foreach (List <SHuman> group in groups)
                {
                    if (GroupHasSimilar(group, human))
                    {
                        if (selectedGroup == null)
                        {
                            (selectedGroup = group).Add(human);
                        }
                        else
                        {
                            selectedGroup.AddRange(group);
                            group.Clear();
                        }
                    }
                }

                if (selectedGroup == null)
                {
                    groups.Add(new List <SHuman>()
                    {
                        human
                    });
                }
            }

            groups.RemoveAll(group => group.Count == 0);

            return(groups);
        }
Beispiel #4
0
 private static bool Compare(SHuman first, SHuman second)
 {
     return(first.Firstname == second.Firstname || first.Surname == second.Surname ||
            first.Patronymic == second.Patronymic || first.Year == second.Year);
 }
Beispiel #5
0
        public static List <List <SHuman> > Groupping(SHuman[] humans, List <List <SHuman> > groups)
        {
            bool   newGroup = false;
            SHuman newHuman = new SHuman();

            // Создаем первую группу из первого человека из списка людей
            if (groups.Count == 0)
            {
                List <SHuman> group0 = new List <SHuman>();
                group0.Add(humans[0]);
                groups.Add(group0);
            }

            // Пробегаем по каждой группе, по каждому человеку в этой группе
            // И смотрим можем ли добавить в этй группу нового человека из списка
            foreach (var human in humans.ToList())
            {
                foreach (var group in groups.ToList())
                {
                    foreach (var humanInGroup in group.ToList())
                    {
                        // Добавляем в группу человека, если можем,
                        // Но смотрим не содержится ли он там уже
                        if (IsHumanEqual(human, humanInGroup))
                        {
                            if (!group.Contains(human))
                            {
                                group.Add(human);
                                newGroup = false;
                                Groupping(humans, groups);
                            }
                        }

                        // Если его нельзя добавить в текущую группу, то запоминаем,
                        // Его, тк его мб сможем добавить в другую группу, до
                        // Которой еще не дошли
                        else
                        {
                            newGroup = true;
                            newHuman = human;
                        }
                    }
                }

                // Проверяем есть ли этот человек в уже какой-то группе
                foreach (var group in groups.ToList())
                {
                    if (group.Contains(human))
                    {
                        newGroup = false;
                    }
                }

                // Создаем новую группу и добавляем туда человека
                if (newGroup)
                {
                    List <SHuman> @group = new List <SHuman>();
                    group.Add(newHuman);
                    groups.Add(group);
                    Groupping(humans, groups);
                }
            }

            return(groups);
        }