Ejemplo n.º 1
0
        IEnumerable <Hit> GetProximalHits(int proximity)
        {
            var proximalHits = new List <Hit>();

            Hits = Hits.OrderByDescending(h => h.Index).ThenByDescending(h => h.Skip).ToList();

            for (var i = 0; i < Hits.Count(); i++)
            {
                var current      = Hits[i];
                var j            = i + 1 < Hits.Count() ? i + 1 : i;
                var next         = Hits[j];
                var currentIndex = current.Index;
                var nextIndex    = next.Index;
                var currentSkip  = current.Skip;
                var nextSkip     = next.Skip;

                if (Math.Abs(currentSkip - nextSkip) <= proximity || Math.Abs(currentIndex - nextIndex) <= proximity)
                {
                    if (!proximalHits.Contains(current))
                    {
                        proximalHits.Add(current);
                    }
                    if (!proximalHits.Contains(next))
                    {
                        proximalHits.Add(next);
                    }
                }
            }

            Hits = Hits.OrderBy(h => h.Index).ThenBy(h => h.Skip).ToList();
            return(proximalHits);
        }