public PersonTeamsCompareResult(PersonTeamsIdentity identity, PersonTeamGenderStructure genderStructure, int identicalPersonsCount) { Identity = identity; GenderStructure = genderStructure; IdenticalPersonsCount = identicalPersonsCount; }
public static PersonTeamsCompareResult GetPersonTeamsIdentityAndGenderStructure(IEnumerable <Person> personsA, IEnumerable <Person> personsB) { PersonTeamsIdentity identity = PersonTeamsIdentity.None; PersonTeamGenderStructure genderStructure = PersonTeamGenderStructure.Unknown; int identicalPersonsCount = 0; var personPairs = GetPersonPairsByIndexPosition(personsA, personsB); var overallCounter = personPairs.Count(); var identityCounter = 0; var maleCounter = 0; var femaleCounter = 0; var neutralCounter = 0; for (int i = 0; i < personPairs.Count(); i++) { var personA = personPairs.ElementAt(i).Item1; var personB = personPairs.ElementAt(i).Item2; if (personA == null || personB == null) { break; } if (!personA.Id.Equals(personB.Id)) { break; } //identical! identityCounter++; //determine sex (just need to look at one of them, because they are identical) if (personA.Sex == Sex.Male) { maleCounter++; continue; } if (personA.Sex == Sex.Female) { femaleCounter++; continue; } if (personA.Sex == Sex.Neutral || personA.Sex == Sex.Unknown) { neutralCounter++; continue; } } #region PersonTeamsIdentity if (identityCounter == 0) { identity = PersonTeamsIdentity.None; } else if (identityCounter == overallCounter) { identity = PersonTeamsIdentity.Full; } else if (identityCounter < overallCounter) { identity = PersonTeamsIdentity.Partial; } #endregion #region IdenticalPersonsCount identicalPersonsCount = identityCounter; #endregion #region PersonTeamGenderStructure if (identityCounter == 1 && maleCounter == 1) { genderStructure = PersonTeamGenderStructure.SingleMale; } else if (identityCounter == 1 && femaleCounter == 1) { genderStructure = PersonTeamGenderStructure.SingleFemale; } else if (identityCounter == 1 && neutralCounter == 1) { genderStructure = PersonTeamGenderStructure.SingleNeuter; } else if (identityCounter > 1 && maleCounter == identityCounter) { genderStructure = PersonTeamGenderStructure.TeamOfMalesOnly; } else if (identityCounter > 1 && femaleCounter == identityCounter) { genderStructure = PersonTeamGenderStructure.TeamOfFemalesOnly; } else if (identityCounter > 1 && neutralCounter == identityCounter) { genderStructure = PersonTeamGenderStructure.TeamOfNeutersOnly; } else if (identityCounter > 1 && maleCounter + femaleCounter == identityCounter) { genderStructure = PersonTeamGenderStructure.TeamOfMalesAndFemales; } else if (identityCounter > 1 && femaleCounter + neutralCounter == identityCounter) { genderStructure = PersonTeamGenderStructure.TeamOfFemalesAndNeuters; } else if (identityCounter > 1 && maleCounter + neutralCounter == identityCounter) { genderStructure = PersonTeamGenderStructure.TeamOfMalesAndNeuters; } else if (identityCounter >= 3 && maleCounter >= 1 && femaleCounter >= 1 && neutralCounter >= 1 && maleCounter + femaleCounter + neutralCounter == identityCounter) { genderStructure = PersonTeamGenderStructure.TeamOfMalesFemalesAndNeuters; } else { genderStructure = PersonTeamGenderStructure.Unknown; } #endregion return(new PersonTeamsCompareResult(identity, genderStructure, identicalPersonsCount)); }