【发布时间】:2020-07-02 16:08:51
【问题描述】:
在搜索数据库时,我正在删除波兰字母表中的重音字符。这样用户就可以输入没有重音的文本。
我在我的 TableView 搜索控制器中使用它,大约有 15,000 个字符串。代码可以运行,但速度很慢,每输入一个字母,应用就会冻结一秒钟。
有没有人有更有效的方法的解决方案?
我的 TableView 过滤器:
//My old method which didn't convert accent letters and works smoothly
var arr = dataSetArray.filter({$0.lowercased().contains(searchText.lowercased())})
//My new filtering method
var arr = dataSetArray.filter({$0.forSorting().contains(searchText.lowercased())})
我的扩展:
extension String {
func forSorting() -> String {
let set = [("ą", "a"), ("ć", "c"), ("ę", "e"), ("ł", "l"), ("ń", "n"), ("ó", "o"), ("ś", "s"), ("ź", "z"), ("ż", "z")]
let ab = self.lowercased()
let new = ab.folding(options: .diacriticInsensitive, locale: nil)
let final = new.replaceCharacters(characters: set)
return final
}
}
extension String {
func replaceCharacters(characters: [(String, String)]) -> String
{
var input: String = self
let count = characters.count
if count >= 1
{
for i in 1...count
{
let c = i - 1
let first = input
let working = first.replacingOccurrences(of: characters[c].0, with: characters[c].1)
input = working
}
}
return input
}
}
【问题讨论】:
-
你的工作比你必须的要努力得多。
.folding调用已经消除了您列出的所有变音符号,除了波兰语 ell。所以你只剩下一个字符需要替换了。
标签: swift string special-characters uisearchcontroller diacritics