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); }
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); }
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); }