Ios 如何在Objective-C中最小化搜索时间
我正在Ios 如何在Objective-C中最小化搜索时间,ios,sorting,search,Ios,Sorting,Search,我正在JSON数据中实现搜索,其中包含HTML格式的数据 问题是数据非常大 我必须以彩色显示匹配的搜索,如图所示: 例如,我搜索了How: 我的搜索流程是这样的: 步骤1:-检查是否存在数据 步骤2:-从搜索内容中去除Html标记 步骤3:-在内容中执行搜索 使用NSRange rangeOfString选项 步骤4:-如果找到匹配项。用英语断句 由字符串分隔的组件 (因为我必须显示我在其中找到搜索的句子) 步骤5:-在函数中传递返回给我的句子 属性字符串 步骤6:-在数组中添加结果并重新加载
JSON
数据中实现搜索,其中包含HTML
格式的数据
问题是数据非常大
我必须以彩色显示匹配的搜索,如图所示:
例如,我搜索了How
:
我的搜索流程是这样的:
步骤1:-检查是否存在数据
步骤2:-从搜索内容中去除Html标记
步骤3:-在内容中执行搜索
使用NSRange rangeOfString选项
步骤4:-如果找到匹配项。用英语断句
由字符串分隔的组件
(因为我必须显示我在其中找到搜索的句子)
步骤5:-在函数中传递返回给我的句子属性字符串 步骤6:-在数组中添加结果并重新加载表 我正在
TextField
委托方法shouldChangeCharactersInRange
问题是我的表格延迟了1到2秒
如果输入fast,那么假设我搜索动物
,那么我会搜索动物
动物,最后搜索动物
如何加强搜索。我的建议如下: 准备 步骤1和2。不要在每次搜索时重复它们,在开始搜索之前或仅在第一次搜索期间重复一次 附加步骤:将课文分成句子。您将有一个
NSArray
句子作为输入
搜索
使用搜索文本构建一个NSPredicate
(例如包含[cd]
)。使用该谓词筛选输入数组。那应该很快
重新加载表格以显示结果。不要在这里使用属性字符串
突出显示
显示单元格时使用当前搜索文本高亮显示(生成属性字符串)。您将只突出显示实际显示的内容,因此这应该非常快
可能的改进
取消Bouncing-搜索文本更改后不要立即开始搜索。启动计时器,该计时器将在0.1-0.5秒内进行搜索。如果有新的搜索文本更新,请取消上一个计时器并启动一个新的计时器。这会将多个更新合并为一个更新
使用以前的搜索结果-如果以前的搜索文本是新搜索文本的子字符串,则只能搜索以前的结果,也就是说,要搜索的数据更少
如果搜索速度仍然太慢(如果您确实有大量文本),请在不同的调度队列中执行搜索,并显示活动指示器,直到结果完成。最好在Thank@rmaddy接受您的建议:)首先,无需中断字符串。只需从整个内容创建一个属性字符串,并为给定范围添加属性。你也可以考虑去抖动(例如在<代码>应该改变字符范围>代码>启动一个定时器,在0.1秒之后更新高亮显示,如果在0.1次过去之间有另一个改变,只要取消定时器并在0.1之后计划新的更新。这是一个常见的修复方法,用于在键入太快时更新太多。如果我这样做,那么如何检测到搜索词所在的句子I?我以前做过,但没用,嗯,我明白了。如果你只搜索句子,也许你应该把你的数据保存成一个句子数组?然后您可以使用一个简单的
NSPredicate
进行搜索。非常感谢。。。在您的指导下,我正在更改我的实现。。如果他们有任何问题或改进,我会回复你