将NSArray项与NSArray中的每个其他项进行比较

时间:2012-11-29 22:19:11

标签: objective-c ios nsarray

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

我见过一个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中是否有更好的方法?另外我需要做的是确保项目在循环时不会比较它。

非常感谢任何帮助或示例。

更新** BOLD 是问题的更新部分**

3 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

我使用的是NSMutableDictionary。这非常类似于“将两个列表合并为唯一值”,苹果文档实际上解释了某处复杂的方式。我忘记了在哪里找到它,但简单的方法是:Merge two arrays while preserving the original array order

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

答案 2 :(得分:0)

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