有序集合(NSOrderedSet与NSMutableOrderedSet)
NSOrderedSet与NSMutableOrderedSet既有NSSet集合的特征,也具有NSArray类似的功能。
- NSOrderedSet不允许元素重复,这与NSSet集合相同。
- NSOrderedSet可以保持元素的添加顺序,而且每个元素都有索引,可以根据索引来操作元素。这与NSArray的功能类似。
NSMutableOrderedSet是NSOrderedSet的子类,代表集合元素可变的有序集合。NSMutableOrderedSet增加了添加元素、删除元素、替换元素、集合排序,以及计算集合的交集、并集、差集等功能,与NSMutableSet为NSSet集合增加的功能相似。
NSOrderedSet的功能和用法:
//定义一个函数,该函数用于把NSArray或NSSet集合转换为字符串
NSString* NSCollectionToString(id collection) {
NSMutableString* result = [NSMutableString
stringWithString:@"["];
for (id object in collection) {
[result appendString:[object description]];
[result appendString:@","];
}
NSUInteger len = [result length]; //获取字符串长度
//去掉字符串最后的一个字符
[result deleteCharactersInRange:NSMakeRange(len - 1, 1)];
[result appendString:@"]"];
return result;
}
int main(int argc, char* argv[]) {
@autoreleasepool {
//创建NSOrderedSet集合,故意使用重复的元素
//可看到程序只会保留一个元素
NSOrderedSet* set = [NSOrderedSet orderedSetWithObjects:
[NSNumber numberWithInt:40],
[NSNumber numberWithInt:12],
[NSNumber numberWithInt:-9],
[NSNumber numberWithInt:28],
[NSNumber numberWithInt:12],
[NSNumber numberWithInt:17], nil];
NSLog(@"%@", NSCollectionToString(set));
//下面方法都是根据索引来操作集合元素
//获取第一个元素
NSLog(@"set集合的第一个元素:%@", [set firstObject]);
//获取最后一个元素
NSLog(@"set集合的最后一个元素:%@", [set lastObject]);
//获取指定索引处的元素
NSLog(@"set集合中索引为2的元素:%@", [set objectAtIndex:2]);
NSLog(@"28在set集合中的索引为:%ld", [set indexOfObject:
[NSNumber numberWithInt:28]]);
//对集合进行过滤,获取元素值大于20的集合元素的索引
NSIndexSet* indexSet = [set indexesOfObjectsPassingTest:
^(id obj, NSUInteger idx, BOOL* stop) {
return (BOOL)([obj intValue] > 20);
}];
NSLog(@"set集合中元素值大于20的元素的索引为:%@", indexSet);
}
return 0;
}
输出结果:
NSOrderedSet集合还有一个NSMutableOrderedSet子类,该子类与NSMutableOrderedSet为NSOrderedSet扩展的功能,就像NSMutableSet为NSSet扩展的功能一样,就是增加了添加元素、删除元素、替换元素、集合排序,以及计算集合的交集、并集、差集等功能。