// 1 - Find the matching item index
NSIndexSet* indexes = [[self.orderItems allKeys] indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
IODItem* key = obj;
return [searchItem.name isEqualToString:key.name] &&
searchItem.price == key.price;
}];
// 2 - Return first matching item
if ([indexes count] >= 1) {
IODItem* key = [[self.orderItems allKeys] objectAtIndex:[indexes firstIndex]];
return key;
}
在这段代码中,我正在检查字典中的所有键并将其与搜索项进行比较。
此词典何时具有多个具有相同搜索项的键?
我对密钥的了解是它们是唯一的,但是这段代码维护着与特定搜索项匹配的密钥的所有出现的索引集。
答案 0 :(得分:0)
测试不是比较键。密钥(显然)是IODItem
的实例。该测试正在比较这些项目的两个特定属性name
和price
。根据{{1}}的{{1}}和-isEqual:
的定义方式,可能会有多个具有相同名称和价格的密钥,因此通过测试的密钥不止一个。因此,-hash
中可能有多个索引。
但是代码实际上并没有检查是否存在多个索引。它正在检查是否存在至少一个(即大于零)。