0

我如何获取不在第一个 NSDictionary 中但在第二个中的对象?下面的方法给了我几次相同的对象

  for (NSString *numCodetmp in numCodeForInsertingRow) {
                for (NSString *numCodeInsertmp in numCode) 
                   if (![numCodetmp  isEqualToString:numCodeInsertmp])
                       NSLog(@"Equal : %@, %@ ",numCodetmp,numCodeInsertmp);
            }
4

5 回答 5

1

因此,请注意,当您像以前那样嵌套 for 循环时,外部 for 循环会在内部 for 循环的每次完整迭代中执行一次。其次,您的 if 语句检查与 NSLog 语句所说的相反的内容。您的 if 语句将 numCodeTmp 与 numCodeInsertmp 进行比较,并返回一个布尔值,说明它们是否相等。然后,您反转该结果并检查其计算结果是否为真。因此,您是说如果两者不相等(这将评估为真......令人困惑,我知道),打印 Equal : %@, %@。我假设您打算删除“!”。

好的,现在讨论更大的问题。如果您要比较字典中的对象,则必须为其提供访问该特定对象的键。我无法从您上面提供的代码中分辨出 numCodeForInsertingRow 和 numCode 是什么,但是如果它们是字典,那么您就不能正确地从中获取对象。如果您只是比较字符串,比较 NSSet 将是一种更简单的检查差异的方法。如果字符串是字典中对象的键,而这就是您要比较的,则需要

  1. 使用 [dict allKeys] 创建一个键数组,然后以这种方式运行你的 for 循环。这假设如果 Obj1 存在于 Dict1 和 Dict2 中,则 Key1 在两者中是相同的。
  2. 为每个字典的特定键创建一个对象数组。如果 [dict1Array count] > 0 && [dict2Array count] > 0,则对象在两个字典中都存在

还有很多其他的方法可以比较,但是 NSSet 和上面的两点只是几个例子。

于 2012-04-04T17:17:56.570 回答
0

// 假设您有 NSMutableDictionary 对象,并且键值是您可以用于比较的 PK:

for (NSString *firstSetKey in firstSet)
{
     [secondSet removeOjbectForKey:firstSetKey];
} 
于 2012-11-09T00:35:24.287 回答
0

使用 allKeys 方法从第二个字典中获取所有键。

用一个

for (object in dictionary) 

for 循环的样式来循环遍历这些键。

依次使用每个键来查看另一个字典中是否存在具有该键的对象。(使用 objectForKey)。如果给定的键在另一个字典中不存在,那就是您要查找的项目之一。

另一个发布者使用 keysOfEntriesPassingTest 方法的想法可能也可以,但是如果您对块不满意,那么实现起来可能会有点混乱。

于 2012-04-04T20:44:23.117 回答
0

也许您可以使用keysOfEntriesPassingTest:方法?就像是:

NSSet *keysInDictTwoOnly;
keysInDictTwoOnly = [secondDict keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop){
    return ([firstDict objectForKey:key] != obj);
}];

即,keysInDictTwoOnly如果某个键不在其中,firstDict或者firstDict该键下的对象与secondDict该键下的对象不同,则该键在其中。

于 2012-04-04T17:28:45.540 回答
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
         }
    }
}

这样做的好处是不相互比较密钥并且不比较多次,以及提高性能。

于 2012-04-04T20:54:30.920 回答