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); }