是否有内置方法(我通过搜索文档找不到它)来查看两个字符串中相似字母的数量?字母的顺序是不相关的,因此比较“abc”和“cad”将使字符'c'和'd'具有66%的匹配。出现的次数也是相关的。 'a'应该匹配第一次,但不是第二次匹配,因为两个字符串之间只有一个共同的'a'。是否有内置的方法来执行此操作,通过使用一些按位操作或我必须循环和手动比较?
答案 0 :(得分:3)
你必须自己构建它,但这是一个快捷方式。有一个名为NSCountedSet
的内置集合类。该对象保留每个唯一对象以及每个对象的添加数量。
您可以将这两个字符串加载到两个不同的NSCountedSet
集合中。然后只检查生成的集合中的项目。例如,从第一个NSCountedSet
抓取一个对象。检查第二个NSCountedSet
中是否存在。该特定字母的2个计数中较小的一个是2个字符串共有多少个字母。要缩短迭代次数,请从包含较少对象的集合开始,然后枚举这些对象。
以下是Apple NSCountedSet
的文档。
https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCountedSet_Class/Reference/Reference.html
答案 1 :(得分:1)
我犹豫不决,但是,可能没有任何方法可以满足您的要求。我这样做:
在NSString上创建一个类别。让我们称之为-(float)percentageOfSimilarCharactersForString:(NSString*)targetString
这是一个粗略的伪代码,属于这一类:
self
名为selfCopy and trim
selfCopy`的副本,仅包含唯一字符。targetString
修剪为唯一字符。要修剪为唯一字符,您可以使用NSSet
或其子类。循环每个字符并添加到集合将有所帮助。 targetString
- 相关NSSet的每个字符,并检查它是否存在于selfCopy
- 相关的NSSet中。为此,您可以使用另一个名为containsString的类别。 You can find that here。每次containsString返回true,都会增加一个预定义的计数器。(counter_value/length_of_selfCopy)*100
。