NSSet-不重覆內容的物件

NSSet-不重覆內容的物件

NSArry保存的內容是依照順序來保存,然而NSDictionay不依照順序的保存所有值(Values)與鍵(Keys)的內容,然而NSSet保存過程中是以值為依據,不重方式覆保存內容,一旦已經有相同值時就不再保存其值(類似Java的Set),下面使用例子來了解一下NSSet:

//-----------start-----------
        NSSet* numbersSet = [NSSet setWithObjects:@"One",@"Two",@"Three",@"Four",@"Four",@"Four",nil];
        NSLog( @"numbersSet: %@", numbersSet );
//------------end------------

輸出結果:

2014-09-16 23:26:37.464 NSSetTest1[7546:303] numbersSet: {(
    One,
    Three,
    Four,
    Two
)}

輸出結果能了解到,其保存值不照順序,但值重覆時只保存一組。

增加物件

增加新的物件至NSSet需要使用method setByAddingObject,但因為是不可變物件的關系,新增結果會再建立一個新的NSSet物件:

//-----------start-----------
        NSSet* moreSets = [numbersSet setByAddingObject:@"Five"];
        NSLog( @"moreSets: %@", moreSets );
//------------end------------

輸出結果:

2014-09-16 23:26:37.466 NSSetTest1[7546:303] moreSets: {(
    Five,
    One,
    Three,
    Four,
    Two
)}

判斷NSSet物件內容是否被包含

兩個NSSet物件我們能使用method isSubsetOfSet來判斷所指定比對的NSSet內容是否與被包含期中:

//-----------start-----------
        NSSet* numbersSet = [NSSet setWithObjects:@"One",@"Two",@"Three",@"Four",@"Four",@"Four",nil];
        NSLog( @"numbersSet: %@", numbersSet );
        NSSet* numbersSet1 = [NSSet setWithObjects:@"One",@"Two",@"Three",@"Four1",nil];
        NSLog( @"numbersSet1: %@", numbersSet1 );

        NSSet* moreSets = [numbersSet setByAddingObject:@"Five"];
        NSLog( @"moreSets: %@", moreSets );
        if ([numbersSet isSubsetOfSet:moreSets])
            NSLog( @"moreSets is a superset of numbersSet" );
        else
            NSLog( @"moreSets is not a superset of numbersSet" );
        if ([numbersSet1 isSubsetOfSet:moreSets])
            NSLog( @"moreSets is a superset of numbersSet1" );
        else
            NSLog( @"moreSets is not a superset of numbersSet1" );
//------------end------------

輸出結果:

2014-09-16 23:41:48.064 NSSetTest1[7794:303] numbersSet: {(
    One,
    Three,
    Four,
    Two
)}
2014-09-16 23:41:48.066 NSSetTest1[7794:303] numbersSet1: {(
    One,
    Three,
    Four1,
    Two
)}
2014-09-16 23:41:48.066 NSSetTest1[7794:303] moreSets: {(
    Five,
    One,
    Three,
    Four,
    Two
)}
2014-09-16 23:41:48.066 NSSetTest1[7794:303] moreSets is a superset of numbersSet
2014-09-16 23:41:48.067 NSSetTest1[7794:303] moreSets is not a superset of numbersSet1

例子中利用moreSets使用method isSubsetOfSet來查對numbersSet與numbersSet1的內容是不是被包含其中,由輸出結果得知,因為numbersSet1中有個值為Four1與moreSets內容比對後,numbersSet1的內容不全然被包含。