内置NSString方法来比较类似字符的数量

是否有内置方法(我无法通过搜索文档找到它)查看两个字符串中类似字母的数量? 这些字母的顺序不相关,所以比较“abc”和“cad”将有66%的字符“c”和“d”匹配。 发生次数也是相关的。 'a'应该是第一次匹配,但不是第二次匹配,因为两个字符串之间只有一个共同的'a'。 有没有一种内置的方式来做到这一点目前通过使用一些按位操作,或者我必须循环和手动比较?


你将不得不自己建立这个,但这是做它的捷径。 有一个名为NSCountedSet的内置集合类。 这个对象保存每个独特的对象,并计算每个对象的添加数量。

您可以NSCountedSet两个字符串加载到两个不同的NSCountedSet集合中。 然后只需检查结果集合中的项目。 例如,从第一个NSCountedSet获取一个对象。 检查它是否存在于第二个NSCountedSet 。 该特定字母的2个字母中的较小者是这两个字符串共有的那些字母中的多少个。 为了缩短迭代的次数,首先从收集的对象少一些,然后枚举这些对象。

这里是Apple的NSCountedSet的文档。 https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCountedSet_Class/Reference/Reference.html


我很犹豫,但是,可能没有任何方法可以满足您的要求。 我会这样做:

在NSString上创建一个类别。 让我们调用它-(float)percentageOfSimilarCharactersForString:(NSString*)targetString

这里有一个粗略的伪代码进入这个类别:

  • 复制selfselfCopy and trim selfCopy`以仅包含唯一字符。
  • 同样修剪targetString为唯一的字符。 为了修剪为独特的字符,您可以使用NSSet或其子类。 遍历每个角色并添加到集合中会有所帮助。
  • 现在按ASCII值对这两个集合进行排序。
  • 遍历与targetString相关的NSSet的每个字符,并检查它是否存在于selfCopy相关的NSSet中。 为此,您可以使用另一个名为containsString的类别。 你可以在这里找到。 每次containsString返回true时,都会增加一个预定义的计数器。
  • 你的返回值是(counter_value/length_of_selfCopy)*100
  • 链接地址: http://www.djcxy.com/p/74009.html

    上一篇: NSString built in method to compare number of similar characters

    下一篇: Compare two strings?