Exemplo n.º 1
0
        /// <summary>
        /// Synchronous version
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="items"></param>
        /// <param name="topSize"></param>
        /// <returns></returns>
        public T[] GetTopN <T>(IEnumerable <T> items, int topSize) where T : IComparable <T>
        {
            BoundedOrderedQueue <T> queue = new BoundedOrderedQueue <T>(topSize);

            foreach (T i in items)
            {
                queue.Add(i);
            }
            return(queue.ToArray());
        }
Exemplo n.º 2
0
        public T[] GetTopNPar <T>(IEnumerable <T> items, int topSize) where T : IComparable <T>
        {
            BoundedOrderedQueue <T> queue = new BoundedOrderedQueue <T>(topSize);
            object monitor = new object();

            Parallel.ForEach(
                items,
                () => new BoundedOrderedQueue <T>(topSize), // initial state
                (it, state, partial) => {                   // local body
                partial.Add(it);
                return(partial);
            },
                (p) => {                              // final aggregation
                lock (monitor)
                    queue.Merge(p);
            });

            return(queue.ToArray());
        }
Exemplo n.º 3
0
        public T[] ParallelForGetTopN <T>(IEnumerable <T> items, int topSize) where T : IComparable <T>
        {
            BoundedOrderedQueue <T> boundedOrderedQueue = new BoundedOrderedQueue <T>(topSize);

            Parallel.ForEach(items,
                             () => new BoundedOrderedQueue <T>(1),
                             (item, state, queue) =>
            {
                queue.Add(item);
                return(queue);
            }, queue =>
            {
                lock (queue)
                {
                    boundedOrderedQueue.Merge(queue);
                }
            });

            return(boundedOrderedQueue.ToArray());
        }
Exemplo n.º 4
0
 public void Merge(BoundedOrderedQueue <T> ol)
 {
 }