我提出了一个棘手的问题,我不确定如何处理。所以,我已经制定了一个包含字典的plist,其中包含两个对象:
虽然只有210个国家/地区的事实。
并且,我已经能够搜索许多国家的列表,其中可能存在或不存在事实。但这是我的问题,我使用名为Geonames的网络服务,用户可以使用搜索栏显示控制器搜索国家/地区,这些与插件大小配对的plist国家名称实际上来自维基百科文章。
现在,在Geonames和维基百科的plist中命名的国家可能会略有不同,可能有一个额外的空间,一个额外的短划线,一个额外的字母。这就是为什么我想看看geoname国家字符串是否与plist中的字符串非常相似。
所以,这不是isEqualToString:
,因为它发现它是否准确,compare:
方法是否有效?
我该如何处理?这是一个例子:
Geoname返回(不是真正的国家只是一个例子):
但是plist可能会回来:
所以增加1个't',但还有其他情况。我希望这些可以比较精确,或者至少相似,所以我可以将它们视为匹配。
是否有任何教程,资源,项目等可以指向我?
谢谢!再见!
答案 0 :(得分:5)
Soundex算法在这种情况下非常有用。
我在github上找到了sample implementation。
答案 1 :(得分:2)
您需要实现一种用于字符串近似匹配的算法。最受欢迎的此类算法之一是Levenshtein distance,是几种Edit distance算法之一。该距离被计算为将字符串A变换为字符串B所需的编辑操作的数量 - 插入,删除或改变字符计数为一个编辑操作。字符串越近,它们之间的编辑距离越小。您可以计算成对编辑距离,找到最小的距离来识别匹配。
答案 2 :(得分:2)
您可能会发现this post about auto update/complete有用:
我已经测试了UITextView
在您的UIViewController类中遵守UITextViewDelegate
协议时的效果,并且会产生类似于您在Messages应用中找到的结果。我还没有检查UITextField
和UITextFieldDelegate
是否也这样做。