Ejemplo n.º 1
0
        /// <summary>
        /// Static baseMethod allowing us to sort result sets.
        /// </summary>
        static public EvaluationResultSet[] SortResultSets(IEnumerable <EvaluationResultSet> resultSets,
                                                           bool positiveSet, SortResultsEnum sortCriteria)
        {
            SortedDictionary <Decimal, EvaluationResultSet> dictionary = new SortedDictionary <Decimal, EvaluationResultSet>();

            foreach (EvaluationResultSet resultSet in resultSets)
            {
                // All the different values are coded in the double.
                // As the last part is a unique index, so that if values match, sorting will still work properly.
                double sortBasedValue = 0;
                if (sortCriteria == SortResultsEnum.OriginalOrder)
                {
                    sortBasedValue = dictionary.Count;
                }
                else if (sortCriteria == SortResultsEnum.Average)
                {
                    if (positiveSet)
                    {
                        sortBasedValue = resultSet.CalculatePositivePerPosition();
                    }
                    else
                    {
                        sortBasedValue = resultSet.CalculateNegativePerPosition();
                    }
                }
                else if (sortCriteria == SortResultsEnum.Count)
                {
                    if (positiveSet)
                    {
                        sortBasedValue = resultSet.PositiveEntries.Count;
                    }
                    else
                    {
                        sortBasedValue = resultSet.NegativeEntries.Count;
                    }
                }
                else if (sortCriteria == SortResultsEnum.Percentage)
                {
                    if (positiveSet)
                    {
                        sortBasedValue = resultSet.CalculatePositiveWinningPercentage();
                    }
                    else
                    {
                        sortBasedValue = resultSet.CalcualteNegativeWinningPercentage();
                    }
                }
                else if (sortCriteria == SortResultsEnum.Sum)
                {
                    if (positiveSet)
                    {
                        sortBasedValue = resultSet.CalculatePositiveSum();
                    }
                    else
                    {
                        sortBasedValue = resultSet.CalculateNegativeSum();
                    }
                }
                else
                {
                    System.Diagnostics.Debug.Fail("Sorting case not handled.");
                }

                dictionary.Add(new Decimal(100000000 * sortBasedValue) + new Decimal(dictionary.Count), resultSet);
            }

            EvaluationResultSet[] result = new EvaluationResultSet[dictionary.Count];
            dictionary.Values.CopyTo(result, 0);
            return(result);
        }
        /// <summary>
        /// Static baseMethod allowing us to sort result sets.
        /// </summary>
        public static EvaluationResultSet[] SortResultSets(IEnumerable<EvaluationResultSet> resultSets, 
            bool positiveSet, SortResultsEnum sortCriteria)
        {
            SortedDictionary<Decimal, EvaluationResultSet> dictionary = new SortedDictionary<Decimal, EvaluationResultSet>();
            foreach (EvaluationResultSet resultSet in resultSets)
            {
                // All the different values are coded in the double.
                // As the last part is a unique index, so that if values match, sorting will still work properly.
                double sortBasedValue = 0;
                if (sortCriteria == SortResultsEnum.OriginalOrder)
                {
                    sortBasedValue = dictionary.Count;
                }
                else if (sortCriteria == SortResultsEnum.Average)
                {
                    if (positiveSet)
                    {
                        sortBasedValue = resultSet.CalculatePositivePerPosition();
                    }
                    else
                    {
                        sortBasedValue = resultSet.CalculateNegativePerPosition();
                    }
                }
                else if (sortCriteria == SortResultsEnum.Count)
                {
                    if (positiveSet)
                    {
                        sortBasedValue = resultSet.PositiveEntries.Count;
                    }
                    else
                    {
                        sortBasedValue = resultSet.NegativeEntries.Count;
                    }
                }
                else if (sortCriteria == SortResultsEnum.Percentage)
                {
                    if (positiveSet)
                    {
                        sortBasedValue = resultSet.CalculatePositiveWinningPercentage();
                    }
                    else
                    {
                        sortBasedValue = resultSet.CalcualteNegativeWinningPercentage();
                    }
                }
                else if (sortCriteria == SortResultsEnum.Sum)
                {
                    if (positiveSet)
                    {
                        sortBasedValue = resultSet.CalculatePositiveSum();
                    }
                    else
                    {
                        sortBasedValue = resultSet.CalculateNegativeSum();
                    }
                }
                else
                {
                    System.Diagnostics.Debug.Fail("Sorting case not handled.");
                }

                dictionary.Add(new Decimal(100000000 * sortBasedValue) + new Decimal(dictionary.Count), resultSet);
            }

            EvaluationResultSet[] result = new EvaluationResultSet[dictionary.Count];
            dictionary.Values.CopyTo(result, 0);
            return result;
        }