我有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 是问题的更新部分**
答案 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)
使用两套。如果字符串没有冲突地进入第一组,则将其添加到第二组。如果字符串在第一组中遇到冲突,则将其从第二组中删除。当您处理完所有字符串后,第二组包含唯一的字符串。