protected IList SelectMatches()

in src/cs/Microsoft.PhoneticMatching/Matchers/BaseMatcher.cs [41:72]


        protected IList<T> SelectMatches(IList<Match<Target<T>>> candidates)
        {
            var matches = new List<T>();
            if (candidates.Count != 0)
            {
                var bestDistance = candidates[0].Distance;
                var maxDistance = Math.Max(
                    bestDistance * this.Config.BestDistanceMultiplier,
                    this.Config.MaxDistanceMarginReturns);

                var dedupe = new HashSet<int>();
                foreach (var candidate in candidates)
                {
                    // supports MaxReturns == 0
                    if (matches.Count >= this.Config.MaxReturns)
                    {
                        break;
                    }

                    if (candidate.Distance < maxDistance)
                    {
                        if (!dedupe.Contains(candidate.Element.Id))
                        {
                            dedupe.Add(candidate.Element.Id);
                            matches.Add(candidate.Element.Value);
                        }
                    }
                }
            }

            return matches;
        }