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 GameSourceManager(Game game, PhysicEngineProxy physicEngine, IDebugger debugger) { serialSID = 0; //GSList = new KeyedList<uint, GameSource>(); GSList = new AutoSortList <GameSource>(GameSource.CompareSID); GSAdapterList = new AutoSortList <GameSourceAdapter>(GameSourceAdapter.CompareSID); visitors = new List <IGSVisitor>(); added = new List <GameSource>(); removed = new List <GameSource>(); temp_adding = new List <GameSource>(); temp_removing = new List <GameSource>(); temp_stateUpdating = new List <GameSource>(); PhysicEngine = physicEngine; Debugger = debugger; this.game = game; }
public TrackableObjectPool() { tracker = new AutoSortList <T>(Comparison); }