HangulSearch
是一个支持多种韩语搜索方式的 Swift 库。
您可以利用各种搜索模式来实现对韩语文本数据的灵活搜索功能。
HangulSearch
的 URL:https://github.com/Juhwa-Lee1023/HangulSearch
main
分支进行安装。Next
,然后点击 Finish
完成安装。要使用 HangulSearch
库,首先需要创建一个 HangulSearch
实例。
其中需要声明要搜索的数据数组、搜索模式以及提取要搜索的数据属性的 keySelector
闭包。
var searchEngine: HangulSearch<String>?
searchEngine = HangulSearch(items: ["사과", "바나나", "포도"], mode: .containsMatch, keySelector: { $0 })
struct Person {
var name: String
var age: Int
}
let persons = [Person(name: "철수", age: 25), Person(name: "영희", age: 22)]
var searchEngine: HangulSearch<Person>?
searchEngine = HangulSearch(items: persons, mode: .autocomplete, keySelector: { $0.name })
isEqual
使用方法 isEqual
用于在搜索结果中删除重复项。 默认情况下,它通过 keySelector
比较项目,但在某些情况下,您可以使用 isEqual
来比较两个项目的附加属性,以确定它们是否重复。
何时需要使用
例如,在 Person 对象数组中,如果姓名相同但年龄不同,则仅通过姓名进行比较可能会仅返回重复姓名中的一个。 此时,如果使用 isEqual
来比较 age 属性,则可以防止即使有重复的姓名也仅返回一个。
isEqual
使用示例
struct Person {
var name: String
var age: Int
}
let persons = [
Person(name: "철수", age: 25),
Person(name: "철수", age: 30),
Person(name: "영희", age: 22)
]
var searchEngine: HangulSearch<Person>?
searchEngine = HangulSearch(
items: persons,
mode: .containsMatch,
keySelector: { $0.name },
isEqual: { $0.age == $1.age } // 추가로 age까지 비교하여 중복을 방지
)
let results = searchEngine?.searchItems(input: "철수")
// 결과: ["철수(25)", "철수(30)"]
初声搜索查找与输入的初声相匹配的结果。 例如,如果输入“ㅊㅅ”,则会返回诸如“철수”之类的结果。
let searchEngine = HangulSearch(items: persons, mode: .chosungAndFullMatch, keySelector: { $0.name })
let results = searchEngine?.searchItems(input: "ㅊㅅ")
// results?.map { $0.name } = ["김철수", "이철수", "박철수", "최철수", "최성수", "최상욱", "정철수", "강철수", "초철수", "초성수", "초상욱", "윤철수", "장철수", "임철수"]
完整字符串搜索返回包含输入字符串的所有项目。
let searchEngine = HangulSearch(items: persons, mode: .containsMatch, keySelector: { $0.name })
let results = searchEngine?.searchItems(input: "철수")
// results?.map { $0.name } = ["김철수", "이철수", "박철수", "최철수", "정철수", "강철수", "초철수", "윤철수", "장철수", "임철수"]
自动完成搜索查找包含输入字符串的项目。 例如,如果搜索 "쵳",则可以获得 "최철수" 之类的结果。
let searchEngine = HangulSearch(items: persons, mode: .autocomplete, keySelector: { $0.name })
let results = searchEngine?.searchItems(input: "쵳")
// results?.map { $0.name } = ["최철수"]
综合搜索模式结合了初声搜索、完整字符串搜索和自动完成搜索,从而提供更多的搜索结果。 此模式为各种输入形式返回最广泛的搜索结果。
根据韩语字母顺序对搜索结果进行排序。 例如,结果会按 “ㄱ”、“ㄴ”、“ㄷ” 的顺序显示。
searchEngine?.changeSortMode(mode: .hangulOrder)
let results = searchEngine?.searchItems(input: "철수")
// 결과가 한글 자모 순서대로 정렬됩니다.
根据韩语字母顺序的逆序对搜索结果进行排序。 例如,结果会按 “ㅎ”、“ㅍ”、“ㅌ” 的顺序显示。
searchEngine?.changeSortMode(mode: .hangulOrderReversed)
let results = searchEngine?.searchItems(input: "철수")
// 결과가 한글 자모 역순으로 정렬됩니다.
根据搜索词与项目之间的编辑距离(Levenshtein Distance)对项目进行排序,从最相似的项目开始。 即使搜索词不完全匹配,最接近的词也会显示在顶部。
searchEngine?.changeSortMode(mode: .editDistance)
let results = searchEngine?.searchItems(input: "철수")
// 검색어와 가장 유사한 결과부터 순차적으로 정렬됩니다.
根据搜索词在项目中出现的位置进行排序。 搜索词在项目中出现的位置越靠前,优先级越高。
searchEngine?.changeSortMode(mode: .matchPosition)
let results = searchEngine?.searchItems(input: "철")
// "철"이 앞부분에 위치하는 항목이 먼저 표시됩니다.
按默认数据顺序返回结果,不进行排序。
searchEngine?.changeSortMode(mode: .none)
let results = searchEngine?.searchItems(input: "철수")
// 데이터가 입력된 순서대로 반환됩니다.
如果您想参考测试代码示例以进一步理解和利用该库的功能,请参阅 测试代码。
如果您想为该项目做出贡献,请发送 Pull Request 或提交 Issues。 欢迎任何类型的贡献!
本项目基于 MIT 许可证提供。 有关详细信息,请参阅 LICENSE 文件。