コード例 #1
0
 public PersonTeamsCompareResult(PersonTeamsIdentity identity, PersonTeamGenderStructure genderStructure, int identicalPersonsCount)
 {
     Identity              = identity;
     GenderStructure       = genderStructure;
     IdenticalPersonsCount = identicalPersonsCount;
 }
コード例 #2
0
        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));
        }