【发布时间】:2021-01-21 23:43:52
【问题描述】:
我正在开发一个内部应用程序,它将在一个文本文件(约 60,000 行)中搜索内容。 用户将在他的 iPhone 上的 UISearchBar 中键入一个字符串,应用程序将返回该字符串所在的行。
我就是这样做的。
首先,我将文本文件拆分为一个名为 entriesInLine 的数组:
var entriesInLine: [String] = []
let fileWithEntries = NSBundle.mainBundle().pathForResource("database", ofType: "txt")
var entriesFromFile = String(contentsOfFile: fileWithEntries!, encoding: NSUTF8StringEncoding, error: nil)
if let content = entriesFromFile {
self.entriesInLine = content.componentsSeparatedByString("\n")
println(self.entriesInLine.count)
}
然后我希望用户能够使用 UISearchBar 搜索数据库。这是我的搜索方法:
func filterEntries(searchText: String) {
for var i = 0; i < self.entriesInLine.count; i++ {
if ( self.entriesInLine[i].rangeOfString(searchText) != nil) {
self.filteredEntries.append(extractEntry(entriesInLine[i]))
}
这是我的 searchDisplayController 方法:
func searchDisplayController(controller: UISearchDisplayController!, shouldReloadTableForSearchString searchString: String!) -> Bool {
self.filterEntries(searchString)
}
一切正常,但速度太慢,因为数组很大。
您知道在我的文本文件中搜索内容的更快方法吗?
非常感谢您的帮助!
谢谢
【问题讨论】:
-
尝试改变你在数组中搜索和存储的逻辑。在数组中存储比查找字符串要花费很多时间。
-
谢谢。所以现在我使用 self.entriesFromFile!.rangeOfString(searchText) 直接将文件作为字符串读取。现在搜索东西要快得多,但我无法获取行号来提取它。我该怎么办,也许使用扫描仪?
-
什么范围的字符串返回字符串的位置或该字符串的计数?
-
我可以得到找到的字符串的范围,但不能得到当前行的编号
-
在范围内您从字符串开始的位置获取位置?与 range.location
标签: ios swift uisearchbar