我如何获取不在第一个NSDictionary中的对象,但是在第二个?下面的方法多次给我相同的对象
for (NSString *numCodetmp in numCodeForInsertingRow) {
for (NSString *numCodeInsertmp in numCode)
if (![numCodetmp isEqualToString:numCodeInsertmp])
NSLog(@"Equal : %@, %@ ",numCodetmp,numCodeInsertmp);
}
答案 0 :(得分:1)
所以,要意识到当你像你一样为循环嵌套时,对于内部for循环的每次完整迭代,forter循环都会执行一次。其次,if语句检查与NSLog语句相反的内容。你的if语句将numCodeTmp与numCodeInsertmp进行比较,并返回一个bool,说明它们是否相等。然后,您反转该结果并检查该计算结果是否为true。因此,你要说两者是否相等(这将评估为真...令人困惑,我知道),打印Equal:%@,%@。我假设你打算删除“!”。
好的,现在是更大的问题。如果要比较字典中的对象,则必须为其提供访问该特定对象的密钥。我不知道你上面提供的代码中有哪些numCodeForInsertingRow和numCode,但是如果它们是字典,你就不会正确地抓取它们中的对象。如果您只是比较字符串,比较NSSets将是检查差异的更简单方法。如果字符串是字典中对象的键,那就是你要比较的东西,你需要
还有很多其他的比较方法,但NSSet和上面两点只是几个例子。
答案 1 :(得分:0)
也许您可以使用keysOfEntriesPassingTest:方法?类似的东西:
NSSet *keysInDictTwoOnly;
keysInDictTwoOnly = [secondDict keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop){
return ([firstDict objectForKey:key] != obj);
}];
即如果密钥不在keysInDictTwoOnly
中,则密钥在firstDict
中,否则此密钥下的firstDict
中的对象与{{1}中的对象不同在这把钥匙下。
答案 2 :(得分:0)
使用allKeys方法从第二个字典中获取所有密钥。
使用
for (object in dictionary)
for循环的样式循环遍历这些键。
依次使用每个键来查看另一个词典中是否存在具有该键的对象。 (使用objectForKey)。如果另一个字典中不存在给定的键,那么这就是您要查找的项目之一。
另一张海报使用keysOfEntriesPassingTest方法的想法可能也会起作用,但如果你对块感到不舒服,可能会有点混乱。
答案 3 :(得分:0)
我会这样做:
NSArray *keys = [dictionary allKeys];
for (int i = 0; i < keys.count; i++)
{
for (int j = i + 1; j < keys.count; j++)
{
if ([[keys objectAtIndex:i] isEqual:[keysObjectAtIndex:j]])
{
// insert code here
}
}
}
这样做的好处是不会相互比较密钥,也不会多次比较,以及提高性能。
答案 4 :(得分:0)
//假设您有NSMutableDictionary对象,并且键值是可用于比较的PK:
for (NSString *firstSetKey in firstSet)
{
[secondSet removeOjbectForKey:firstSetKey];
}