NSSet:obj-c的唯一集合

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

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

控制臺的輸出只有一個對象,符合我們的預(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個array,還是符合我們的預(yù)期

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

[arrayB addObject:@2];

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

輸出了2個一樣的array,說好的唯一性呢???

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

NSSet* setB = [setA copy];

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

setB又只有一個array,這世界亂套了

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

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.盡量不要將可變對象放到set里面去,因為后續(xù)如果更改可變對象,可能會打破set的唯一性

2.set copy的時候會檢測對象的唯一性

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

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

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