Foundation框架: 8.OC中的集合类之三 - NSSet和NSMutableSet的基本认识
前面我们讲完过了NSArray和NSMutablArray了, 这次我们来讲讲第二个集合类, NSSet和它的子类NSMutableSet, 其实NSSet和NSArray基本上是一样的, 唯一的不同点就是NSSet它是没有循序的, 所返回的对象是随机的, 下面让我们来看看吧~
例子:
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { NSSet *s = [NSSet set]; NSSet *s1 = [NSSet setWithObjects:@"a", @"b", @"c", @"d", @"e", nil]; NSString *str = [s1 anyObject]; NSLog(@"s = %ld, s1 = %ld", s.count, s1.count); NSLog(@"str = %@", str); return 0; }
打印出来的结果:
2015-02-05 20:39:14.211 7.NSSet[3833:303] s = 0, s1 = 5 2015-02-05 20:39:14.212 7.NSSet[3833:303] str = d
其实NSSet和NSArray的创建方法很像, 这是OC语法中的一个规律, 创建什么类的对象, 就以什么类名开头, 下面继续说NSMutableSet:
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { NSMutableSet *s = [NSMutableSet set]; // 1.添加元素的方法 [s addObject:@"a"]; // 2.删除元素的方法 [s removeObject:@"a"]; return 0; }
有些人会很细心的发现, 在删除元素的方法里会少了几个和NSArray一样的方法, 就只剩下两个方法, 其实这是没错的, 由于NSSet的特性, 它是随机返回的, 我们并不能知道它会返回哪个对象给我们, 所以这里的删除元素方法就缺少了几个和位置相关的.
总结:
NSSet和NSArray的对比:
1> 共同点
* 都是集合, 能存放多个OC对象
* 只能存放OC对象, 不能存放非OC对象类型(基本数据类型:int, char, float等, 结构体, 枚举)
* 本身都不可变, 都有一个可变的子类
2> 不同点
* NSArray有顺序, NSSet没有顺序.
好了, 这次就讲到这里, 下次我们继续~~