containsObject 使用遇到问题 比较内容明明一样却返回NO

探讨了在Objective-C中如何正确地比较NSArray中的NSDictionary元素,指出数据类型匹配的重要性,并通过示例说明当字典中相同键对应的值类型不一致时,会导致比较失败的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 NSArray * dataArry =@[@{@"name":@"123",@"code":@"1"},@{@"name":@"123",@"code":@"1"},@{@"name":@"123",@"code":@"1"},@{@"name":@"123",@"code":@"1"},];
 //查看数组里是否有该字典
 NSDictionary * dict= @{@"name":@"123",@"code":@"11"};
if([dataArry containsObject:dict]){
    //有返回yes
        retuen = YES;
    }else{
    //没有返回no
        return = NO;
    }
  //  有的人说可能即使一样也会走No,我遇到的一个问题是因为dataArry里面字典的属性与要比较的字典里属性是否一样。
   // 例如:@"name":@"123",@"code":@"1"} name里的value 123是字符串(NSString),而比较的字典里的name里的value 123是整形(NSInteger)那样比较返回就会是No

这里写图片描述
上传一张图片,大家看一下,不喜欢勿喷。

Objective-C是一面向对象的编程语言它是基于C语言的扩展虽然Objective-C本身并没有提供红黑树的实现,但可以通过使用Foundation框架中的NSSet类来实现类似红黑树的功能[^2]。 NSSet是Foundation框架中的一个集合类,它可以存储一组无序且唯一的对象。NSSet内部的实现可能使用了红黑树等数据结构来提高查询速度。 下面是一个使用Objective-C实现红黑树的示例代码: ```objective-c #import <Foundation/Foundation.h> @interface RedBlackTree : NSObject - (void)insertValue:(NSNumber *)value; - (BOOL)containsValue:(NSNumber *)value; @end @implementation RedBlackTree { NSMutableSet *_set; } - (instancetype)init { self = [super init]; if (self) { _set = [NSMutableSet set]; } return self; } - (void)insertValue:(NSNumber *)value { [_set addObject:value]; } - (BOOL)containsValue:(NSNumber *)value { return [_set containsObject:value]; } @end int main(int argc, const char * argv[]) { @autoreleasepool { RedBlackTree *tree = [[RedBlackTree alloc] init]; [tree insertValue:@5]; [tree insertValue:@3]; [tree insertValue:@8]; NSLog(@"Contains 5: %@", [tree containsValue:@5] ? @"Yes" : @"No"); // 输出:Contains 5: Yes NSLog(@"Contains 7: %@", [tree containsValue:@7] ? @"Yes" : @"No"); // 输出:Contains 7: No } return 0; } ``` 在上面的示例代码中,我们创建了一个RedBlackTree类,它使用NSMutableSet来存储红黑树的节点。insertValue方法用于插入一个值,containsValue方法用于检查某个值是否存在于红黑树中。 请注意,这只是一个简单的示例,实际上红黑树的实现要复杂得多。如果需要更复杂的红黑树功能,建议使用第三方库或自行实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值