-1
// 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;
}

このコードでは、辞書内のすべてのキーを調べて、それを検索項目と比較しています。

この辞書に同じ検索項目を持つ複数のキーがあるのはいつですか?

キーについて私が知っていることは、それらは一意であるということですが、このコードは、特定の検索項目に一致するキーのすべての出現に対してインデックス セットを維持しています。

4

1 に答える 1

0

テストはキーを比較していません。キーは (明らかに) のインスタンスですIODItem。このテストでは、これらのアイテムの 2 つの特定のプロパティ と を比較しnamepriceいます。-isEqual:に対してとがどのよう-hashに定義されているかによってIODItem、同じ名前と価格を持つ複数のキーが存在する可能性があり、したがって、テストに合格する複数のキーが存在する可能性があります。したがって、 には複数のインデックスが存在する場合がありますindexes

しかし、コードは実際には複数のインデックスがあるかどうかをチェックしていません。少なくとも 1 つ (つまり、0 より大きい) があるかどうかをチェックしています。

于 2015-04-13T21:17:46.010 に答える