fix: remove duplicate matches

This commit is contained in:
iff 2025-01-06 20:23:44 +01:00
parent e51338211b
commit eb4d71e157
3 changed files with 25 additions and 8 deletions

12
Cargo.lock generated
View file

@ -313,6 +313,15 @@ dependencies = [
"either", "either",
] ]
[[package]]
name = "itertools"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285"
dependencies = [
"either",
]
[[package]] [[package]]
name = "itoa" name = "itoa"
version = "1.0.14" version = "1.0.14"
@ -506,6 +515,7 @@ dependencies = [
name = "pay-respects-utils" name = "pay-respects-utils"
version = "0.1.4" version = "0.1.4"
dependencies = [ dependencies = [
"itertools 0.14.0",
"regex-lite", "regex-lite",
] ]
@ -617,7 +627,7 @@ dependencies = [
"arc-swap", "arc-swap",
"base62", "base62",
"globwalk", "globwalk",
"itertools", "itertools 0.11.0",
"lazy_static", "lazy_static",
"normpath", "normpath",
"once_cell", "once_cell",

View file

@ -12,4 +12,4 @@ include = ["**/*.rs"]
[dependencies] [dependencies]
regex-lite = "0.1" regex-lite = "0.1"
itertools = "0.14"

View file

@ -4,6 +4,7 @@
use crate::files::*; use crate::files::*;
use regex_lite::Regex; use regex_lite::Regex;
use itertools::Itertools;
fn regex_captures(regex: &str, string: &str) -> Vec<String> { fn regex_captures(regex: &str, string: &str) -> Vec<String> {
let regex = Regex::new(regex).unwrap(); let regex = Regex::new(regex).unwrap();
@ -151,12 +152,15 @@ pub fn find_similars(
continue; continue;
} }
let distance = compare_string(typo, candidate); let distance = compare_string(typo, candidate);
if distance == min_distance { use std::cmp::Ordering::*;
min_distance_index.push(i); match distance.cmp(&min_distance) {
} else if distance < min_distance { Equal => min_distance_index.push(i),
min_distance = distance; Less => {
min_distance_index.clear(); min_distance = distance;
min_distance_index.push(i); min_distance_index.clear();
min_distance_index.push(i);
}
_ => {}
} }
} }
if !min_distance_index.is_empty() { if !min_distance_index.is_empty() {
@ -164,6 +168,9 @@ pub fn find_similars(
min_distance_index min_distance_index
.iter() .iter()
.map(|&i| candidates[i].to_string()) .map(|&i| candidates[i].to_string())
.collect::<Vec<String>>()
.into_iter()
.unique()
.collect(), .collect(),
); );
} }