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)); } }
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)); } }
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)); } }
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)); } }
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)); } }
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)); } }
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)); } }
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)); } }
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)); } }
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())); } } }
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)); } }
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)); } }