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的内容不全然被包含。