Используя Swift4, я хотел бы отсортировать массив строк в соответствии с ближайшим совпадением с заданным searchTerm. Для меня важно, что если searchTerm может быть найден как точное совпадение, то returnArray должен показать этот searchTerm заранее!
Пример: Учитывая Array = ["Hello world", "Hello Jamaica", "Hello", "Family", "Hel"]
И searchTerm = "Hello"
алгоритм должен вернуть:
["Hello", "Hello world", "Hello Jamaica", "Hel", "Family"]
.
Подход 1: я попытался использовать FuzzyMatching - и это каким-то образом сработало (т.е. он отсортировал inputArray в соответствии с заданный searchTerm, однако он не помещал точные совпадения вперед! То есть с помощью FuzzyMatching я добился хорошей сортировки в соответствии с совпадениями подстрок и синтаксической сортировкой. Но это не принесло мне точных совпадений заранее в returnArray).
Подход 2: Затем я попробовал свой собственный алгоритм (см. код ниже). Но если в массиве есть несколько строк, которые начинаются с моего searchTerm (т. е. имеют searchTerm в качестве префикса), то мой алгоритм почему-то не работает.
static func bestMatchFilterdStringArray(inputArray: [String], searchTerm: String) -> [String] {
let matchingTerms = inputArray
.filter { $0.range(of: searchTerm, options: .caseInsensitive) != nil }
.sorted { ($0.hasPrefix(searchTerm) ? 0 : 1) < ($1.hasPrefix(searchTerm) ? 0 : 1) }
return matchingTerms
}
Как в Swift4 выполняется «сортировка массива строк с ближайшим совпадением»? Особенно приведение мне точных совпадений в returnArray? Любая помощь приветствуется!