集合操作
不可变集合初始化:类方法和对象方法初始化
</pre><pre name="code" class="objc">//
// main.m
// 集合练习
//
// Created by smartlei on 15/6/2.
// Copyright (c) 2015年 smartlei. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface NSSet (printing)//让NSSet使用分类协议
-(void)printf;
@end
@implementation NSSet (printing)
-(void)printf
{
printf("{");
for(NSNumber *element in self)
{
printf(" %li",(long)[element integerValue]);
}
printf("}\n");
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSSet *set3=[NSSet setWithObjects:@12,@200,@3,nil];
NSSet *set5=[[NSSet alloc] initWithObjects:@123,@34,@45, nil];
NSSet *set6=[NSSet new];
// [set6 initWithObjects:@123,@34,@45, nil];//注意该方式错误,因为set6申明的不可变集合,初始化后内存数据不可再次更该
NSLog(@"set3:");
[set3 printf];
NSLog(@"set5:");
[set5 printf];
}
return 0;
}
输出:
2015-06-02 15:43:31.582集合练习[1998:218885] set3:
{ 12 3 200}
2015-06-02 15:43:31.583集合练习[1998:218885] set5:
{ 123 34 45}
集合成员测试:某一个成员是否在集合中
NSMutableSet *set1=[NSMutableSet setWithObjects:@1,@3,@5,@10, nil];
NSLog(@"set1:");
[set1 printf];
//确定成员个数
NSLog(@"set1成员个数:%ld",[set1 count]);
//包含性测试
if([set1 containsObject:@1]==YES)
{
NSLog(@"set1 containsObject:@1");
}
//是否是集合成员测试
if ([set1 member:@1])
{
NSLog(@"set1 member:@1");
}
2015-06-02 15:47:57.244集合练习[2006:220848] set1:
{ 3 10 5 1}
2015-06-02 15:47:57.245集合练习[2006:220848] set1成员个数:4
2015-06-02 15:47:57.245集合练习[2006:220848] set1 containsObject:@1
2015-06-02 15:47:57.246集合练习[2006:220848] set1 member:@1
不可变集合测试:
NSSet *set1=[NSSet setWithObjects:@1,@3,@5,@10, nil];
NSSet *set2=[NSSet setWithObjects:@1,@3,@5,@10, nil];
NSSet *set3=[NSSet setWithObjects:@3,@5,@10000000, nil];
NSSet *set4=[NSSet setWithObjects:@3,@5, nil];
//相等性测试
if ([set1 isEqualTo:set2]==YES)
{
NSLog(@"set1 isEqualTo:set2");
}
else
{
NSLog(@"set1 is NOT EqualTo:set2");
}
if ([set1 isEqualTo:set3]==YES)
{
NSLog(@"set1 isEqualTo:set3");
}
else
{
NSLog(@"set1 is NOT EqualTo:set3");
}
//测试接受者只要一个对象存在在与另一个集合中
if([set3 intersectsSet:set2]==YES)
{
NSLog(@"set3 intersectsSet:set2");
}
//测试接受者所有对象存在于另一个成员中
if([set3 isSubsetOfSet:set2]==YES)
NSLog(@"set3 所有成员都在set2");
else
NSLog(@"set3 所有成员不都在set2");
if([set4 isSubsetOfSet:set2]==YES)
NSLog(@"set4 所有成员都在set2");
else
NSLog(@"set4 所有成员不都在set2");
2015-06-02 15:59:37.310集合练习[2039:224734] set1 isEqualTo:set2
2015-06-02 15:59:37.311集合练习[2039:224734] set1 is NOT EqualTo:set3
2015-06-02 15:59:37.312集合练习[2039:224734] set3 intersectsSet:set2
2015-06-02 15:59:37.312集合练习[2039:224734] set3所有成员不都在set2
2015-06-02 15:59:37.312集合练习[2039:224734] set4所有成员都在set2
可变集合测试
集合交并集操作
NSMutableSet *set1=[NSMutableSet setWithObjects:@1,@3,@5,@10,@8,@9, nil];
NSSet *set2=[NSSet setWithObjects:@1,@3,@5,@10, @6,nil];
//获得交集对象
[set1 intersectSet:set2];
NSLog(@"获得交集:");
[set1 printf];
//两个集合的并集对象
NSMutableSet *set3=[NSMutableSet setWithObjects:@1,@3,@5,@10,@8,@9, nil];
NSLog(@"获得并集:");
[set3 unionSet:set2];
[set3 printf];
//删除并集对象
NSMutableSet *set4=[NSMutableSet setWithObjects:@1,@3,@5,@10,@8,@9, nil];
NSLog(@"删除并集对象:");
[set4 minusSet:set2];
[set4 printf];
输出:
2015-06-02 16:31:42.456 集合练习[2070:231861] 获得交集:
{ 3 10 5 1}
2015-06-02 16:31:42.457 集合练习[2070:231861] 获得并集:
{ 9 5 1 10 6 3 8}
2015-06-02 16:31:42.457 集合练习[2070:231861] 删除并集对象:
{ 9 8}
NSMutableSet *set1=[NSMutableSet setWithObjects:@1,@3,@5,@10,@8,@9, nil];
//向集合中添加对象
[set1 addObject:@100];
NSLog(@"set1 addObject:@100:");
[set1 printf];
//从集合中移除对象
[set1 removeObject:@100];
NSLog(@"set1 removeObject:@100:");
[set1 printf];
//从集合中删除所有对象
NSLog(@"删除集合所有对象:");
[set1 removeAllObjects];
[set1 printf];
2015-06-02 16:37:11.477 集合练习[2081:233175] set1 addObject:@100:
{ 100 9 5 10 1 3 8}
2015-06-02 16:37:11.478 集合练习[2081:233175] set1 removeObject:@100:
{ 9 5 10 1 3 8}
2015-06-02 16:37:11.478 集合练习[2081:233175] 删除集合所有对象:
{}