gpt4 book ai didi

ios - 包含对象 : returning NO when isEqual and hash match

转载 作者:可可西里 更新时间:2023-11-01 04:39:26 25 4
gpt4 key购买 nike

我有一个 NSMutableOrderedSet,我要从中添加和删除 MTLModels。对于两个对象,hash 和 isEqual 方法都将返回 true,但 containsObject 将返回 false。

此代码有时有效,有时无效。

models count: 1
isEqual: 1
hashes equal: 1
containsObject: 0

下面的代码怎么可能打印出上面的内容?

@property (nonatomic, strong) NSMutableOrderedSet *models;

- (void)remove:(MTLModel *)model {
NSLog(@"models count: %d", self.models.count);
MTLModel *modelInSet = (MTLModel *)self.models.firstObject;
NSLog(@"isEqual: %d", [modelInSet isEqual:model]);
NSLog(@"hashes equal: %d", modelInSet.hash == model.hash);
NSLog(@"containsObject: %d", [self.models containsObject:model]);
}

更新:

作为后续,当 NSMutableOrderedSet 返回 NO 时返回 YES:

[[self.models array] containsObject:model]

更新 2:

如果我检查 modelInSet 是否包含在 self.models 中,它也会返回 NO,即使它是 firstObject 返回的对象。

最佳答案

您可能在将对象添加到集合后对其进行了修改。这是不允许的。该集合不会重新计算哈希值,因此如果您改变对象,它将具有与集合存储的不同的哈希值。这就是创建新集合(在您的情况下为数组)的原因,即因为它会重新计算所有哈希值。

编辑:明确地说,您可以在将对象添加到集合后对其进行变异,但其哈希值不得更改。

关于ios - 包含对象 : returning NO when isEqual and hash match,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19373873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com