ios - 在 iOS 中实现自动完成

标签 ios objective-c algorithm cocoa-touch autocomplete

我正在创建一个应用程序,我需要在用户输入文本输入时实现自动完成功能,10 个最接近/排名最高的单词出现在文本字段下方。

我得到了一个相当大的列表,其中包含大约 80,000 个单词及其各自的“优先级” - 一个数字决定了它们在自动完成中的显示位置,具体取决于数字的大小,像这样:

"transport international";19205
"taxi";18462
"location de voitures";18160
"police";18126
"formation";17858

我是 iOS 开发的新手,想知道执行此操作的最佳方法是什么 - 我应该将 80,000 个短语拆分成更小的文件,还是将它们放在一个文件中?什么会更快?

我在 iOS 的示例中看到了自动完成功能,但它只是为了提供非常少量的建议 - 我以前从未见过使用这么大的文件完成它,显然我希望尽可能快地完成它以增加用户体验。

如有任何关于示例、教程或代码建议的建议,我们将不胜感激,谢谢。

最佳答案

如果您更喜欢自动完成的东西但它是 UITextField 的直接子类,那么 MLPAutoCompleteTextField您可能会感兴趣。

MLPAutoCompleteTextField 的工作原理是在每次文本字段中的文本发生变化时,简单地向其自动完成数据源询问一系列自动完成建议。它甚至可以自动对单词进行排序,以便最接近用户键入内容的单词出现在自动完成列表的顶部(使用 Levenshtein Distance 算法)。自动完成建议可以是简单的字符串,也可以是实现 MLPAutoCompletionObject 协议(protocol)的对象。

提示:对于自动完成术语的大型数据集,您可能希望根据起始字母拆分列表。 (示例:当用户输入字母 F 时,您只为自动完成文本字段提供以 F 开头的单词列表。)

MLPAutoCompleteTextField 可以在合理的时间内高效地对数千条建议进行排序,并且在排序时绝不会阻塞 UI。

目前,加权建议(覆盖默认排序)是不可能的,但这是一个计划中的功能。

关于ios - 在 iOS 中实现自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14960612/

相关文章:

ruby - 这个 "Telephone Words"算法的大 O 复杂度是多少?

ios - 切换 Root View Controller 后模态视图 Controller 处于边缘状态

php - 如何从 MySql 数据库中检索图像?

iphone - 根据 iPhone 颜色更改颜色

objective-c - Objective-C - 音频延迟估计的互相关

algorithm - 理解为什么弗洛伊德的龟兔赛跑算法适用于整数数组

ios - XCUITest:以协调的方式跨两个应用程序运行测试

ios - * .url.com或*添加到Plist时,IOS Plist白名单错误

ios - NSNetService Resolve ipv6 无法在其上发起http请求

algorithm - 编写一个程序检查线性方程是否有正整数解