public static List <FilterResult <T> > MedianValueFilter <T> (IEnumerable <T> items, Func <T, IComparable> valueFunc, int sampleCount, int jump) { T[] itemArray = items.ToArray(); if (itemArray.Length < sampleCount) { itemArray = itemArray.OrderBy(p => valueFunc(p)).ToArray(); var item = GetMedianItem(itemArray); return(new List <FilterResult <T> >() { new FilterResult <T>(item, itemArray, valueFunc(item)) }); } List <FilterResult <T> > results = new List <FilterResult <T> >(); for (int i = sampleCount - 1; i < itemArray.Length; i += jump) { AutoSortList <T> sortedList = new AutoSortList <T>(valueFunc); for (int j = i - sampleCount + 1; j <= i; j++) { sortedList.Add(itemArray[j]); } T medianValue = GetMedianItem(sortedList); results.Add(new FilterResult <T>(medianValue, sortedList, valueFunc(medianValue))); } return(results); }
public override T Get(object arg) { T item = base.Get(arg); tracker.Add(item); return(item); }
private void _addGS(GameSource source) { lock (GSList) { if (!GSList.TryAdd(source)) { return; } added.Add(source); GSAdapterList.Add(new GameSourceAdapter(source)); } }