NSSet:obj-c的唯一集合

Objective-C有3種集合類型(collection):array,dictionary,set,他們?nèi)叩亩x如下:

array:有序集合

dictionary:鍵-值集合

set:無(wú)序唯一集合

前2者大家用得比較多,只有set,很可能大家都沒(méi)用過(guò)

先看看以下代碼:

NSMutableSet* setA = [NSMutableSet new];

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

[setA addObject:arrayA];

NSArray* arrayB =@[@1];

[setA addObject:arrayB];

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

看看控制臺(tái)輸入,A和B都有

更改一下程序,將arrayB初始化與arrayA一樣

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

控制臺(tái)的輸出只有一個(gè)對(duì)象,符合我們的預(yù)期

再更改一下程序,將array更改為可修改的,如下:

NSMutableSet* setA = [NSMutableSet new];

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

[setA addObject:arrayA];

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

[setA addObject:arrayB];

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

輸出還是有2個(gè)array,還是符合我們的預(yù)期

更改一下arrayB的值,使得arrayB與arrayA的內(nèi)容相同,會(huì)有什么效果呢?

[arrayB addObject:@2];

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

輸出了2個(gè)一樣的array,說(shuō)好的唯一性呢???

如果這時(shí)將setA復(fù)制賦值給一個(gè)新的set,會(huì)怎樣呢:

NSSet* setB = [setA copy];

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

setB又只有一個(gè)array,這世界亂套了

經(jīng)過(guò)這么折騰后,代碼如下:

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);

總結(jié)如下:

1.盡量不要將可變對(duì)象放到set里面去,因?yàn)楹罄m(xù)如果更改可變對(duì)象,可能會(huì)打破set的唯一性

2.set copy的時(shí)候會(huì)檢測(cè)對(duì)象的唯一性

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容