mirror of
https://github.com/TECHNOFAB11/pay-respects.git
synced 2026-02-02 07:35:10 +01:00
fix: remove duplicate matches
This commit is contained in:
parent
e51338211b
commit
eb4d71e157
3 changed files with 25 additions and 8 deletions
12
Cargo.lock
generated
12
Cargo.lock
generated
|
|
@ -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",
|
||||||
|
|
|
||||||
|
|
@ -12,4 +12,4 @@ include = ["**/*.rs"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
regex-lite = "0.1"
|
regex-lite = "0.1"
|
||||||
|
itertools = "0.14"
|
||||||
|
|
|
||||||
|
|
@ -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(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue