我正在开发一个内部应用程序,它将在一个文本文件(约60,000行)中搜索。 用户将在他的iPhone上的UISearchBar中键入一个String,App将返回String所在的行。
我就是这样做的。
首先,我将文本文件拆分为名为 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)
}
一切都很有效,但由于阵列很大,所以它太慢了。
您是否知道在文本文件中搜索内容的更快捷方式?
我真的很感谢你的帮助!
谢谢
答案 0 :(得分:2)
试试这个我已经过测试。
var bundle:NSString = NSBundle.mainBundle().pathForResource("File", ofType: "")!;
var entriesFromFile:NSString = NSString.stringWithContentsOfFile(bundle, encoding: NSUTF8StringEncoding, error: &attributeError) as NSString;
var range:NSRange=entriesFromFile.rangeOfString("rrr");
var substring:NSString = entriesFromFile.substringToIndex(range.location);
var arr:NSArray = substring.componentsSeparatedByString("\n");
print("Occurence of String in File on Line Number",arr.count);