예제 #1
0
        public void Evaluate(int SpreadMax)
        {
            //List<double> result = new List<double>();
            IComparer <T> comparer;           // = Comparer<T>.Default;

            comparer = this.FComparer[0] == null ? Comparer <T> .Default : FComparer[0];

            SliceSortComparer <T, IComparer <T> > ssc = new SliceSortComparer <T, IComparer <T> >(comparer);

            FOutput.SliceCount = FInput.SliceCount;
            FFormer.SliceCount = FInput.SliceCount;
            int cnt = 0;

            for (int i = 0; i < FInput.SliceCount; i++)
            {
                List <SliceSortHolder <T> > sort = new List <SliceSortHolder <T> >();
                for (int j = 0; j < FInput[i].SliceCount; j++)
                {
                    SliceSortHolder <T> holder = new SliceSortHolder <T>();
                    holder.FormerSlice = cnt;
                    holder.Item        = FInput[i][j];

                    sort.Add(holder);

                    cnt++;
                    cnt = cnt == SpreadMax ? 0 : cnt;
                }

                sort.Sort(ssc);

                var items =
                    from holder in sort
                    select holder.Item;

                var slice =
                    from holder in sort
                    select holder.FormerSlice;

                FOutput[i] = new Spread <T>(items.ToList());
                FFormer[i] = new Spread <int>(slice.ToList());
            }
        }
예제 #2
0
 public int Compare(SliceSortHolder <T> x, SliceSortHolder <T> y)
 {
     return(comparer.Compare(x.Item, y.Item));
 }