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

时间:2013-03-06 21:40:05

标签: iphone ios objective-c

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

2 个答案:

答案 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

这是一个粗略的伪代码,属于这一类:

  1. 制作self名为selfCopy and trim selfCopy`的副本,仅包含唯一字符。
  2. 同样将targetString修剪为唯一字符。要修剪为唯一字符,您可以使用NSSet或其子类。循环每个字符并添加到集合将有所帮助。
  3. 现在按ASCII值对两个集合进行排序。
  4. 遍历targetString - 相关NSSet的每个字符,并检查它是否存在于selfCopy - 相关的NSSet中。为此,您可以使用另一个名为containsString的类别。 You can find that here。每次containsString返回true,都会增加一个预定义的计数器。
  5. 您的返回值为(counter_value/length_of_selfCopy)*100