4

私がこの-isEqual:方法を持っているとしましょう:

- (BOOL)isEqual:(MyObject*)aObject {
    if (![aObject isKindOfClass:[MyObject class]]) {
        return NO;
    }

    return ([self.dateString isEqualToString:aObject.dateString] || [self.date isEqual:aObject.date]) &&
     ((!self.title && !aObject.title) || [self.title isEqualToString:aObject.title]);
}

したがって、2 つのオブジェクトは、dateORdateStringが等しく、かつ が等しい場合、等しいと見なされますtitle。ここではdateanddateStringが nil であってはならないと仮定します。そうでなければ、それもチェックする必要があります。dateさらに、 と の間に既知の関係はないと仮定しdateStringます。

-hash2 つの等しいオブジェクトが同じハッシュを持つ必要があるという要件を満たすように、対応するメソッドをどのように実装できますか?

この優れたアルゴリズムに従って実装しようとしましたが、2 つの日付の OR 条件を適切なハッシュ メソッドに変換する方法に苦労しています。

(確かに、この種の平等が意味をなすかどうか疑問に思う可能性があるため、この質問はやや学術的です。私は一般的な解決策を見つけることに興味があるので、答えを投稿しないでくださいisEqual:。適切な-hash方法が存在しないことが証明されています。)

4

1 に答える 1

1

日付と日付文字列を完全に無視して、タイトルのみに基づいてハッシュ値を作成します。

- (NSUInteger)hash
{
    return self.title.hash
}

これにより、等しいオブジェクトが常に同じハッシュを持つことが保証されます。同じハッシュを持つオブジェクトは、等しい必要はありません。

于 2013-01-15T17:05:42.267 に答える