Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在Objective-C中最小化搜索时间_Ios_Sorting_Search - Fatal编程技术网

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
进行搜索。非常感谢。。。在您的指导下,我正在更改我的实现。。如果他们有任何问题或改进,我会回复你