美文网首页
NSSet:obj-c的唯一集合

NSSet:obj-c的唯一集合

作者: 老虎Alex | 来源:发表于2016-02-26 13:04 被阅读57次

Objective-C有3种集合类型(collection):array,dictionary,set,他们三者的定义如下:

array:有序集合

dictionary:键-值集合

set:无序唯一集合

前2者大家用得比较多,只有set,很可能大家都没用过

先看看以下代码:

NSMutableSet* setA = [NSMutableSet new];

NSArray* arrayA = @[@1, @2];

[setA addObject:arrayA];

NSArray* arrayB =@[@1];

[setA addObject:arrayB];

NSLog(@"setA : %@", setA);

看看控制台输入,A和B都有

更改一下程序,将arrayB初始化与arrayA一样

NSArray* arrayB =@[@1,@2];

控制台的输出只有一个对象,符合我们的预期

再更改一下程序,将array更改为可修改的,如下:

NSMutableSet* setA = [NSMutableSet new];

NSMutableArray* arrayA = [@[@1,@2] mutableCopy];

[setA addObject:arrayA];

NSMutableArray* arrayB = [@[@1] mutableCopy];

[setA addObject:arrayB];

NSLog(@"setA : %@", setA);

输出还是有2个array,还是符合我们的预期

更改一下arrayB的值,使得arrayB与arrayA的内容相同,会有什么效果呢?

[arrayB addObject:@2];

NSLog(@"setA after change: %@", setA);

输出了2个一样的array,说好的唯一性呢???

如果这时将setA复制赋值给一个新的set,会怎样呢:

NSSet* setB = [setA copy];

NSLog(@"setB : %@", setB);

setB又只有一个array,这世界乱套了

经过这么折腾后,代码如下:

NSMutableSet* setA = [NSMutableSet new];

NSMutableArray* arrayA = [@[@1,@2] mutableCopy];

[setA addObject:arrayA];

NSMutableArray* arrayB = [@[@1] mutableCopy];

[setA addObject:arrayB];

NSLog(@"setA : %@", setA);

[arrayB addObject:@2];

NSLog(@"setA after change: %@", setA);

NSSet* setB = [setA copy];

NSLog(@"setB : %@", setB);

总结如下:

1.尽量不要将可变对象放到set里面去,因为后续如果更改可变对象,可能会打破set的唯一性

2.set copy的时候会检测对象的唯一性

相关文章

  • NSSet:obj-c的唯一集合

    Objective-C有3种集合类型(collection):array,dictionary,set,他们三者的...

  • NSSet 用法详解

    iOS 集合NSSet 用法详解 - CSDN博客 1、集合:集合(NSSet)和数组(NSArray)有相似之处...

  • iOS NSSet、NSMutableSet、NSIndexSe

    一、集合(NSSet)和数组(NSArray)区别 1、集合:集合(NSSet)和数组(NSArray)有相似之处...

  • 74 基础数据类型_NSSet

    集合:NSSet和数组(NSArray)相似,都是存储不同的对象地址;NSArray是有序的集合,NSSet是无序...

  • NSSet集合

    经常忘记和容易混淆的集合方法 并集 :并把结果赋给set5 交集:结果赋值给 set1 结果是(set3 - se...

  • NSSet

    NSSet:无序集合NSSet和NSArray的区别:NSArray可以通过角标获取元素,NSSet是无序的不能用...

  • 集合和数组

    先进行定义比较:NSIndexSet是排好序的,无重复的无符号整形集合.NSSet用于存储对象的集合;NSSet ...

  • OC -- NSSet集合

    _____________________________不可变集合NSSet__________________...

  • NSSet 和 NSMutableSet详解

    作者:孟令文 刚刚学习了Funcdation框架中的NSSet,跟大家分享一下。 1、集合:集合(NSSet)和数...

  • iOS array 与 set 的区别

    NSSet和NSArray都是对象容器,用于存储对象,属于集合; NSSet , NSMutableSet是无序...

网友评论

      本文标题:NSSet:obj-c的唯一集合

      本文链接:https://www.haomeiwen.com/subject/xlhwkttx.html