//NSSet和NSMutableSet是无序的, 但是它保证数据的唯一性。当插入相同的数据时,不会有任何效果。从内部实现来说是hash表,所以可以常数时间内查找一个数据。
#import <Foundation/Foundation.h>
#import "myCategory.h"
int main(int argc, const char * argv[]) {
@autoreleasepool
{
//直接构造对象
NSSet *set1 = [NSSet setWithObjects:@"this",@"is",@"one",@"test", @"best",nil];
NSLog(@"set1 = %@",set1);
NSArray *arry1 = @[@"1",@"2",@"3"];
//使用数组构造对象
NSSet *set2 = [NSSet setWithArray:arry1];
NSLog(@"set2 = %@",set2);
//使用已有set对象构造新对象
NSSet *set3 = [NSSet setWithSet:set1];
NSLog(@"set3 = %@",set3);
//在已有set对象基础上增加‘元素’构造对象
NSSet *set4 = [set3 setByAddingObject:@"program"];
NSLog(@"set4 = %@",set4);
//根据已有的set对象附加另一个set对象构造新对象
NSSet *set5 = [set2 setByAddingObjectsFromSet:set1];
NSLog(@"set5 = %@",set5);
NSArray *arry2 = @[@4,@5,@6];
//在已有set对象基础上附加数组构造对象
NSSet *set6 = [set2 setByAddingObjectsFromArray:arry2];
NSLog(@"set6 = %@",set6);
NSLog(@"set6 count is %lu",set6.count);
//获取set所有对象(在数组中)并排序
NSArray *arry3 = [[NSArray arrayWithArray:set1.allObjects]sortedArrayUsingSelector:@selector(compare:)];
for(NSString *str in arry3)
NSLog(@"arry3 have %@\n",str);
id myObject;
NSEnumerator *enumer = [arry3 objectEnumerator];
myObject = [enumer nextObject];
NSLog(@"myObject class name = %@",[myObject class]);
if([myObject isKindOfClass:[NSString class]])
{
NSLog(@"it is kind of NSString class!");
}
// NSLog(@"arry3 content is %@",arry3);
//
// char str[] = {"abcdefgh"};
//
// NSSet *set7 = [NSSet setWithObjects:(__bridge_transfer NSString *)str count:sizeof(str) / sizeof(str[0])];
for(NSUInteger i = 0; i < set1.count; i++)
NSLog(@"set1 anyobject is %@",[set1 anyObject]);
//判断set对象中是否包含特定元素
if([set1 containsObject:@"is"])
NSLog(@"set1 have \"is\"");
if(![set1 containsObject:@"haha"])
NSLog(@"set not have \"haha\"");
//创建谓词
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF LIKE '*is'"];
//使用谓词获取特定项并放到新的set中
NSSet *set8 = [set1 filteredSetUsingPredicate:predicate];
NSLog(@"set8 = %@",set8);
//向set中每个对象发送指定消息,myDescription是自定义的类别中得方法,为方便测试用
[set8 makeObjectsPerformSelector:@selector(myDescription)];
// NSLog(@"new set8 = %@",set7);
//向set中每个对象发送指定消息,并附加参数
[set8 makeObjectsPerformSelector:@selector(myFun:) withObject:@5];
[set8 makeObjectsPerformSelector:@selector(myFun:) withObject:@"yes"];
//判断参数是不是set中得对象,是的话返回该对象,否则返回nil
if([set1 member:@"is"] != nil)
NSLog(@"set1 have 'is'");
//使用语句块快速枚举
[set8 enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {
NSLog(@"set8 have [%@]",obj);
}];
//使用语句块并带着选项快速枚举,意义不大
[set8 enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id obj, BOOL *stop) {
NSLog(@"new set8 have [%@]",obj);
}];
//判断是不是另一个set的子集
if([set8 isSubsetOfSet:set1])
NSLog(@"set8 is subset of set1");
if(![set1 isSubsetOfSet:set8])
NSLog(@"set1 is not subset of set8");
//判断两个set是否有相同的对象
if([set1 intersectsSet:set8])
NSLog(@"set1 intersect with set8");
//判断两个set中的对象是否完全相同
if([set1 isEqualToSet:set3])
NSLog(@"set1 is equal set3");
if(![set1 isEqualToSet:set2])
NSLog(@"set is not equql set2");
//对set中每个对象使用键-值,并生成新的set
NSSet *set9 = [set1 valueForKey:@"length"];
NSLog(@"set9 = %@",set9);
NSArray *array4 = @[@1,@3,@2,@17,@12,@3,@99,@0];
NSSet *set10 = [NSSet setWithArray:array4];
NSLog(@"before sort set10 = %@",set10);
//创建‘排序描述’
NSSortDescriptor *sortDesc = [NSSortDescriptor sortDescriptorWithKey:@"self" ascending:YES];
//使用‘排序描述’对set对象进行排序,最终生成NSArray对象
NSArray *sortFromSet10 = [set10 sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sortDesc, nil]];
NSLog(@"sortFromSet10 = %@",sortFromSet10);
}
return 0;
}