Exemple #1
0
        public IEnumerable <TResult> GetPartitionResults <TSource, TResult>(IRankEnumerable <TSource> elements
                                                                            , Func <IEnumerable <TSource>, IElement> aggregate
                                                                            , Func <TSource, IElement, TResult> selector)
        {
            List <TSource>  list  = new List <TSource>();
            Queue <TSource> queue = new Queue <TSource>();
            IElement        value;
            int             index = -1;

            int[] keepDenseRank = elements.KeepDenseRank();
            int   denseRank;
            int   temp = 1;

            foreach (TSource element in elements)
            {
                index    += 1;
                denseRank = keepDenseRank[index];
                if (temp != denseRank)
                {
                    temp  = denseRank;
                    value = aggregate(list);
                    while (queue.Count > 0)
                    {
                        yield return(selector(queue.Dequeue(), value));
                    }
                }
                list.Add(element);
                queue.Enqueue(element);
            }
            value = aggregate(list);
            while (queue.Count > 0)
            {
                yield return(selector(queue.Dequeue(), value));
            }
        }
Exemple #2
0
        public IEnumerable <TResult> GetPartitionResults <TSource, TResult>(IRankEnumerable <TSource> elements
                                                                            , Func <TSource, IElement, TResult> selector) where TSource : TSourceBase
        {
            int[]   keepDenseRank = elements.KeepDenseRank();
            decimal dank = 1.0m, count = elements.Count();
            decimal cumeDist = dank / count;
            int     dankMinus, index = -1;

            foreach (int denseRank in keepDenseRank.Distinct())
            {
                dankMinus = keepDenseRank.Where(a => a < denseRank).Count();
                dank      = dankMinus + 1.0m;
                cumeDist  = dank / count;
                if (cumeDist >= _numeric)
                {
                    index = dankMinus;
                    break;
                }
            }
            IElement percentileDisc = index != -1 ? _field(elements.ElementAt(index)) : default(IElement);

            foreach (TSource element in elements)
            {
                yield return(selector(element, percentileDisc));
            }
        }
Exemple #3
0
        public IEnumerable <TResult> GetPartitionResults <TSource, TResult>(IRankEnumerable <TSource> elements
                                                                            , Func <TSource, decimal?, TResult> selector) where TSource : TSourceBase
        {
            decimal[] values = (from a in elements.Select(a => _field(a))
                                where a != null
                                select a.Value).ToArray();
            decimal?percentileCont;

            if (values.Length > 0)
            {
                decimal count = values.Length;
                decimal rn    = 1.0m + (_numeric * (count - 1));
                if (rn % 1.0m == 0.0m)
                {
                    percentileCont = values[(int)rn - 1];
                }
                else
                {
                    decimal ceiling_rn = Math.Ceiling(rn);
                    decimal floor_rn   = Math.Floor(rn);
                    decimal frn_value  = values[(int)floor_rn - 1];
                    decimal crn_value  = values[(int)ceiling_rn - 1];
                    percentileCont = ((ceiling_rn - rn) * frn_value) + ((rn - floor_rn) * crn_value);
                }
            }
            else
            {
                percentileCont = null;
            }
            foreach (TSource element in elements)
            {
                yield return(selector(element, percentileCont));
            }
        }
Exemple #4
0
        public IEnumerable <TResult> GetPartitionResults <TSource, TResult>(IRankEnumerable <TSource> elements
                                                                            , Func <TSource, int, TResult> selector)
        {
            int rowNumber = 0;

            foreach (TSource element in elements)
            {
                rowNumber += 1;
                yield return(selector(element, rowNumber));
            }
        }
Exemple #5
0
        public IEnumerable <TResult> GetPartitionResults <TSource, TResult>(IRankEnumerable <TSource> elements
                                                                            , Func <TSource, IElement, TResult> selector) where TSource : TSourceBase
        {
            TSource  nthElement = elements.ElementAtOrDefault(_offset - 1);
            IElement nthValue   = nthElement != null?_field(nthElement) : default(IElement);

            foreach (TSource element in elements)
            {
                yield return(selector(element, nthValue));
            }
        }
Exemple #6
0
        public IEnumerable <TResult> GetPartitionResults <TSource, TResult>(IRankEnumerable <TSource> elements
                                                                            , Func <TSource, IElement, TResult> selector) where TSource : TSourceBase
        {
            TSource  lastElement = elements.Last();
            IElement lastValue   = _field(lastElement);

            foreach (TSource element in elements)
            {
                yield return(selector(element, lastValue));
            }
        }
Exemple #7
0
        public IEnumerable <TResult> GetPartitionResults <TSource, TResult>(IRankEnumerable <TSource> elements
                                                                            , Func <TSource, IElement, TResult> selector) where TSource : TSourceBase
        {
            int[] keepDenseRank      = elements.KeepDenseRank();
            int   lastDenseRank      = keepDenseRank[keepDenseRank.Length - 1];
            int   lastDenseRankCount = keepDenseRank.Where(a => a == lastDenseRank).Count();
            IEnumerable <TSourceBase> lastDenseRankElements = elements.Skip(keepDenseRank.Length - lastDenseRankCount).Cast <TSourceBase>();
            IElement keepDenseRankLast = _aggregate(lastDenseRankElements);

            foreach (TSource element in elements)
            {
                yield return(selector(element, keepDenseRankLast));
            }
        }
Exemple #8
0
        public IEnumerable <TResult> GetPartitionResults <TSource, TResult>(IRankEnumerable <TSource> elements
                                                                            , Func <TSource, int, TResult> selector)
        {
            int index = -1;

            int[] keepDenseRank = elements.KeepDenseRank();
            int   denseRank;

            foreach (TSource element in elements)
            {
                index    += 1;
                denseRank = keepDenseRank[index];
                yield return(selector(element, denseRank));
            }
        }
Exemple #9
0
        public IEnumerable <TResult> GetPartitionResults <TSource, TResult>(IRankEnumerable <TSource> elements
                                                                            , Func <TSource, int, TResult> selector)
        {
            int temp  = _rows;
            int ntile = 1;

            foreach (TSource element in elements)
            {
                if (temp == 0)
                {
                    ntile += 1;
                    temp   = _rows;
                }
                temp -= 1;
                yield return(selector(element, ntile));
            }
        }
Exemple #10
0
        public IEnumerable <TResult> GetPartitionResults <TSource, TResult>(IRankEnumerable <TSource> elements
                                                                            , Func <TSource, IElement, TResult> selector) where TSource : TSourceBase
        {
            Queue <IElement> queue = new Queue <IElement>();

            foreach (TSource element in elements)
            {
                if (queue.Count < _offset)
                {
                    queue.Enqueue(_field(element));
                    yield return(selector(element, _defaultValue));
                }
                else
                {
                    queue.Enqueue(_field(element));
                    yield return(selector(element, queue.Dequeue()));
                }
            }
        }
Exemple #11
0
        public IEnumerable <TResult> GetPartitionResults <TSource, TResult>(IRankEnumerable <TSource> elements
                                                                            , Func <TSource, int, TResult> selector)
        {
            int index = -1;

            int[] keepDenseRank = elements.KeepDenseRank();
            int   denseRank;
            int   temp = 1, dank = 1;

            foreach (TSource element in elements)
            {
                index    += 1;
                denseRank = keepDenseRank[index];
                if (temp != denseRank)
                {
                    temp = denseRank;
                    dank = keepDenseRank.Where(a => a < temp).Count() + 1;
                }
                yield return(selector(element, dank));
            }
        }
Exemple #12
0
        public IEnumerable <TResult> GetPartitionResults <TSource, TResult>(IRankEnumerable <TSource> elements
                                                                            , Func <TSource, decimal, TResult> selector)
        {
            int index = -1;

            int[]   keepDenseRank = elements.KeepDenseRank();
            int     denseRank;
            int     temp = 1;
            decimal dankMinus = 0.0m, countMinus = elements.Count() - 1.0m;
            decimal percentDist = dankMinus / countMinus;

            foreach (TSource element in elements)
            {
                index    += 1;
                denseRank = keepDenseRank[index];
                if (temp != denseRank)
                {
                    temp        = denseRank;
                    dankMinus   = keepDenseRank.Where(a => a < temp).Count();
                    percentDist = dankMinus / countMinus;
                }
                yield return(selector(element, percentDist));
            }
        }