closestTargetIds function

List<String> closestTargetIds(
  1. String typo,
  2. Set<String> known, {
  3. int maxDistance = 2,
  4. int limit = 3,
})

Ids from known similar to typo (distance ≤ maxDistance), sorted by ascending distance then alphabetically; at most limit results.

Implementation

List<String> closestTargetIds(
  String typo,
  Set<String> known, {
  int maxDistance = 2,
  int limit = 3,
}) {
  final scored = <(int, String)>[];
  for (final id in known) {
    final d = editDistance(typo, id);
    if (d <= maxDistance) scored.add((d, id));
  }
  scored.sort((x, y) {
    final byDistance = x.$1.compareTo(y.$1);
    return byDistance != 0 ? byDistance : x.$2.compareTo(y.$2);
  });
  return scored.take(limit).map((e) => e.$2).toList();
}