internal IEnumerable <MatchMadeTeam> SwapTwoPlayers(IEnumerable <MatchMadeTeam> teams, int teamIndex1, int teamIndex2)
        {
            var nextConfiguration = new MatchMadeTeam[teams.Count()];
            var teamsArray        = teams.ToArray();

            for (var i = 0; i < teams.Count(); i++)
            {
                nextConfiguration[i] = new MatchMadeTeam();
                var guardianArray = teamsArray[i].Guardians.ToArray();

                var newGuardiansArray = new GuardianSnapshot[guardianArray.Length];

                for (var j = 0; j < guardianArray.Length; j++)
                {
                    newGuardiansArray[j] = guardianArray[j];
                }

                nextConfiguration[i].Guardians = newGuardiansArray;
            }

            var guardianIndex1 = _random.Next(0, nextConfiguration[teamIndex1].Guardians.Count());
            var guardianIndex2 = _random.Next(0, nextConfiguration[teamIndex2].Guardians.Count());

            var team1Guardians = nextConfiguration[teamIndex1].Guardians.ToArray();
            var team2Guardians = nextConfiguration[teamIndex2].Guardians.ToArray();

            var guardian1 = team1Guardians[guardianIndex1];

            team1Guardians[guardianIndex1] = team2Guardians[guardianIndex2];
            team2Guardians[guardianIndex2] = guardian1;

            nextConfiguration[teamIndex1].Guardians = team1Guardians;
            nextConfiguration[teamIndex2].Guardians = team2Guardians;

            foreach (var team in nextConfiguration)
            {
                var teamElo = 0.0;
                var teamEff = 0.0;

                foreach (var guardian in team.Guardians)
                {
                    teamElo += guardian.GuardianElo;
                    teamEff += guardian.GuardianEfficiency;
                }

                teamElo = teamElo / team.Guardians.Count();
                teamEff = teamEff / team.Guardians.Count();

                team.TeamEfficiency = teamEff;
                team.TeamElo        = teamElo;
            }
            return(nextConfiguration.ToList());
        }