0

我有一个 NSArray 的 NSStrings 并且想知道如何将数组中的每个项目与数组中的每个其他项目进行比较,以查看是否有任何与其他字符串不同的字符串

我看过一个 c++ 例子

for (int i = 0; i < list.size(); i++) {
  for (int j = i+1; j < list.size(); j++) {
    // compare list.get(i) and list.get(j)
  }
}

但是,如果在目标 C 中有更好更简单的方法,那是不是很伤人?我还需要做的另一件事是确保该项目在循环时不会自我比较。

任何帮助或示例将不胜感激。

更新**粗体是问题的更新部分**

4

3 回答 3

4

如果我正确阅读了您的问题,您希望字符串仅在列表中出现一次,对吗?

NSCountedSet *counted = [NSCountedSet setWithArray:list];
for (NSString *string in counted) {
    NSUInteger count = [counted countForObject:string];
    if (count == 1) {
        // process "string", it appears in the list just once
    }
}

如果您只想知道列表中是否有多个不同的值,请执行以下操作:

NSSet *set = [NSSet setWithArray:list];
if (set.count == 1) {
    // There is only one distinct value in the list
} else {
    // There is more than one distinct value in the list
}
于 2012-11-29T23:03:19.733 回答
0

我会使用 NSMutableDictionary。这与“将两个列表合并为唯一值”非常相似,苹果文档实际上在某处解释了复杂的方式。我忘记了在哪里找到的,但简单的方法就在这里:合并两个数组,同时保留原始数组顺序

所以你要做的是遍历所有内容,看看是否有一个键(设置为字符串),如果没有,通过 setObject: forKey: 方法添加一个,然后通过字典枚举或者只是在之后获取 allKeys 值。

于 2012-11-29T22:32:44.200 回答
0

使用两套。如果字符串进入第一组没有冲突,则将其添加到第二组。如果字符串在第一组中遇到冲突,则将其从第二组中删除。当您处理完所有字符串后,第二组包含唯一的字符串。

于 2012-11-30T00:34:39.543 回答