Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.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
Iphone 我如何在iOS中实现一个字符串过滤算法,以镜像';消息';?_Iphone_Objective C_Ios_Ipad_Autocomplete - Fatal编程技术网

Iphone 我如何在iOS中实现一个字符串过滤算法,以镜像';消息';?

Iphone 我如何在iOS中实现一个字符串过滤算法,以镜像';消息';?,iphone,objective-c,ios,ipad,autocomplete,Iphone,Objective C,Ios,Ipad,Autocomplete,在iOS中,当您开始输入某人的姓名以发送新的SMS/iMessage等时,会弹出一个自动完成列表 我正在尝试重新创建这个搜索算法的工作方式,但是它并不像你想象的那么简单。你可以在你的设备上试一下,看看我的意思,但例如,如果我输入“Joh”或“Brow”,那么“johnbrown”就会出现。但是,键入“ohn”不会显示任何结果。更为困难的是,输入“Mr Green”将允许“Mr Evan Green”显示。。。您可以自己在邮件中尝试,这样可能更容易理解 有没有一种简单的方法来实现这个自动完成算法?

在iOS中,当您开始输入某人的姓名以发送新的SMS/iMessage等时,会弹出一个自动完成列表

我正在尝试重新创建这个搜索算法的工作方式,但是它并不像你想象的那么简单。你可以在你的设备上试一下,看看我的意思,但例如,如果我输入“Joh”或“Brow”,那么“johnbrown”就会出现。但是,键入“ohn”不会显示任何结果。更为困难的是,输入“Mr Green”将允许“Mr Evan Green”显示。。。您可以自己在邮件中尝试,这样可能更容易理解

有没有一种简单的方法来实现这个自动完成算法?(我有一个包含名称的NSString数组,以及一个子字符串来过滤它们)


如果没有简单的方法,你会怎么做?

将名字和姓氏分开。然后,检查任一字符串是否以键入的子字符串开头。这将为第一个描述的案例提供所需的行为

第二种情况更难,更难实现和描述。一种方法是将键入的字符分解为一个空格,这样就有了一个子字符串数组(“Mr”和“Green”)。然后,执行与之前相同的检查;检查数组中的每个名称,查看它是否与名字或姓氏的开头匹配。如果有,请将其添加到结果中。

为此,您应该使用字符串创建一个。您还可以使用(对TRIE的改进)或(基于后缀树的精简数据结构)。检查使用Trie的算法链接

检查这些数据结构之间的差异


后缀树的思想是拥有指向输入字符串的每个后缀的路径,然后您可以使用树搜索来查找随机字符串是否与输入字符串非常快地匹配。

这是我开始做的,但随后它变得很棘手,因为键入“Mr White”不应作为结果列出“Mr Green”。不过,可以用更多的代码进行修复-我现在继续这样做,这只是一个相当大、丑陋且可能效率低下的函数-我希望有一个更简单或更干净的方法:)联系人应用程序中的“Mr”是一个特殊字段吗?此外,当涉及到语言处理时,通常会得到庞大的函数——处理过程非常复杂。