NSOrderedSet
静态的,有序的唯一对象集合,继承自NSObject。(创建后无法修改集合内容);
创建有序集合
// 创建空集合
NSOrderedSet *orderSet = [NSOrderedSet orderedSet];//{()}
// 创建包含一个给定元素的集合
NSOrderedSet *orderSet1 = [NSOrderedSet orderedSetWithObject:@"1"];//{(1)}
// 创建包含多个给定元素的集合
NSOrderedSet *orderSet2 = [NSOrderedSet orderedSetWithObjects:@"1",@"2",@"3", nil];//{(1,2,3)}
NSString *values[4];
values[0] = @"1";
values[1] = @"2";
values[2] = @"3";
values[3] = @"4";
// 创建包含C数组内容的集合
NSOrderedSet *orderSet3 = [NSOrderedSet orderedSetWithObjects:values count:3];//{(1,2,3)}
NSSet *set = [NSSet setWithObjects:@"1",@"2",@"1",@"3",@"2", nil];
// 创建包含set内容的集合
NSOrderedSet *orderSet4 = [NSOrderedSet orderedSetWithSet:set];//{(3,1,2)}
// 创建包含set内容的集合,并复制内容
NSOrderedSet *orderSet5 = [NSOrderedSet orderedSetWithSet:set copyItems:YES];//{(3,1,2)}
NSArray *array = @[@"1",@"2",@"3"];
// 创建包含数组内容的集合
NSOrderedSet *orderSet6 = [NSOrderedSet orderedSetWithArray:array];//{(1,2,3)}
// 创建包含数组指定范围内容的集合
NSOrderedSet *orderSet7 = [NSOrderedSet orderedSetWithArray:array range:NSMakeRange(0, 1) copyItems:YES];//{(1)}
// 创建包含指定集合内容的集合
NSOrderedSet *orderSet8 = [NSOrderedSet orderedSetWithOrderedSet:orderSet4];//{(3,1,2)}
// 创建包含集合指定范围内容的集合
NSOrderedSet *orderSet9 = [NSOrderedSet orderedSetWithOrderedSet:orderSet4 range:NSMakeRange(0, 3) copyItems:YES];//{(3,1,2)}
取值
// 创建包含多个给定元素的集合
NSOrderedSet *orderSet = [NSOrderedSet orderedSetWithObjects:@"1",@"2",@"3",@"4",@"5", nil];////{(1,2,3,4,5)}
// 集合中的成员数量
NSUInteger count = [orderSet count];//5
// 集合是否包含指定对象
BOOL isCountain = [orderSet containsObject:@"1"];// yes
// 集合中的第一个对象
NSString *firstObject = [orderSet firstObject];1
// 集合中的最后一个对象
NSString *lastObject = [orderSet lastObject];//5
// 集合中指定索引位置的对象
NSString *objcet = [orderSet objectAtIndex:1];//2
// 集合中指定索引集的对象集合
NSArray *arr = [orderSet objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 2)]];//(1,2)
// 集合中指定对象的索引
NSUInteger index = [orderSet indexOfObject:@"1"];//0
// 集合中给定NSComparator块与集合中的元素进行比较的对象在指定范围内的索引
NSInteger index1 = [orderSet indexOfObject:@"1" inSortedRange:NSMakeRange(0, 3) options:NSBinarySearchingFirstEqual usingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
return obj1 < obj2;
}];//0
// 集合中满足给定条件的索引
NSUInteger index2 = [orderSet indexOfObjectPassingTest:^BOOL(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (idx == 2) {
return YES;
}
return NO;
}];//2
// 按顺序排列的有序集
[orderSet reversedOrderedSet];//{(1,2,3,4,5)}
// 正序遍历
NSEnumerator *enumerator = [orderSet objectEnumerator];
id obj;
while (obj = [enumerator nextObject]) {
NSLog(@"开始打印:%@\n",obj);
}
// 倒序遍历
NSEnumerator *enumerator1 = [orderSet reverseObjectEnumerator];
id obj1;
while (obj1 = [enumerator1 nextObject]) {
NSLog(@"开始打印:%@\n",obj1);
}
集合比较
NSOrderedSet *orderSet = [NSOrderedSet orderedSetWithObjects:@"1",@"2",@"3",@"4",@"5", nil];////{(1,2,3,4,5)}
NSOrderedSet *orderSet1 = [NSOrderedSet orderedSetWithObjects:@"1",@"2",@"3", nil];////{(1,2,3)}
// 两个集合是否相同
BOOL isEqual = [orderSet isEqualToOrderedSet:orderSet1];//NO
// 两个集合至少有一个相同的对象
BOOL isIntersects = [orderSet intersectsOrderedSet:orderSet1];// YES
NSSet *set = [NSSet setWithObjects:@"1",@"2",@"3", nil];
// 两个集合至少有一个相同的对象
BOOL isIntersects1 = [orderSet intersectsSet:set];//YES
// 接收集合的每一个对象也存在于给定集合中
BOOL isSub = [orderSet1 isSubsetOfOrderedSet:orderSet1];//NO
// 接收集合的每一个对象也存在于给定集合中
BOOL isSub1 = [orderSet isSubsetOfSet:set];//NO
集合转数组,集合转Set
NSOrderedSet *orderSet = [NSOrderedSet orderedSetWithObjects:@"3",@"1",@"4",@"2",@"5", nil];//{(1,2,3,4,5)}
// 集合转数组
NSArray *array = [orderSet array];//(3,1,4,2,5)
// 集合转Set
NSSet *set1 = [orderSet set];//{(3,1,4,2,5)}
集合排序
NSOrderedSet *orderSet = [NSOrderedSet orderedSetWithObjects:@"3",@"1",@"4",@"2",@"5", nil];//{(1,2,3,4,5)}
// 按升序列出接收有序集的元素,由给定NSComparator块指定的比较方法确定
NSArray *sortArr = [orderSet sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
return obj1 < obj2;
}];//(5,4,3,2,1)
// 按升序列出接收有序集的元素,由给定NSComparator块指定的比较方法确定
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"" ascending:YES];
NSArray *arr = [NSArray arrayWithObject:descriptor];
NSArray *sortArr1 = [orderSet sortedArrayUsingDescriptors:arr];//(1,2,3,4,5)
// 按升序列出接收有序集的元素,由给定NSComparator块指定的比较方法确定。
NSArray *sortArr2 = [orderSet sortedArrayWithOptions:NSSortConcurrent usingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
return obj1 > obj2;
}];//(1,2,3,4,5)
NSMutableOrderedSet
动态的,有序的独特对象集合,继承自NSOrderedSet。(创建后可修改集合内容);
创建动态有序集合
// 创建给定初始容量的可变有序集合。
NSMutableOrderedSet *mulOrderSet = [NSMutableOrderedSet orderedSetWithCapacity:5];
NSMutableOrderedSet *mulOrderSet1 = [[NSMutableOrderedSet alloc]initWithCapacity:5];
增加数据
NSMutableOrderedSet *mulOrderSet = [NSMutableOrderedSet orderedSetWithCapacity:5];
// 添加指定对象到集合尾部
[mulOrderSet addObject:@"1"];// {(1)}
NSString *values[2];
values[0] = @"2";
values[1] = @"3";
// 添加指定C数组的对象到集合尾部
[mulOrderSet addObjects:values count:2];//{(1,2,3)}
// 添加指定数组的对象到集合尾部
NSArray *array = [NSArray arrayWithObject:@"4"];
[mulOrderSet addObjectsFromArray:array];//{(1,2,3,4)}
// 插入对象到集合指定索引位置
[mulOrderSet insertObject:@"6" atIndex:4];//{(1,2,3,4,6)}
// 替换集合中指定索引处的对象
[mulOrderSet setObject:@"5" atIndexedSubscript:4];//{(1,2,3,4,5)}
// 在指定索引出插入数组的对象
[mulOrderSet insertObjects:[NSArray arrayWithObject:@"6"] atIndexes:[NSIndexSet indexSetWithIndex:5]];//{(1,2,3,4,5,6)}
删除数据
// 创建动态有序集合
NSMutableOrderedSet *mulOrderSet = [NSMutableOrderedSet orderedSetWithObjects:@"1",@"2",@"3",@"4",@"5",@"6", nil];
// 删除集合中的指定对象
[mulOrderSet removeObject:@"1"];//{(2,3,4,5,6)}
// 删除集合中指定索引位置的对象
[mulOrderSet removeObjectAtIndex:1];//{(2,4,5,6)}
// 删除指定索引集位置的对象
[mulOrderSet removeObjectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 1)]];//{(4,5,6)}
// 删除集合中指定数组内容的对象
[mulOrderSet removeObjectsInArray:[NSArray arrayWithObject:@"4"]];//{(5,6)}
// 删除集合中指定范围的对象
[mulOrderSet removeObjectsInRange:NSMakeRange(0, 1)];//{(6)}
// 删除集合中的所有对象
[mulOrderSet removeAllObjects];//{()}
更改数据
NSMutableOrderedSet *mulOrderSet = [NSMutableOrderedSet orderedSetWithObjects:@"1",@"2",@"3",@"4",@"5",@"6", nil];//{(1,2,3,4,5,6)}
// 用指定对象替换指定索引位置的对象
[mulOrderSet replaceObjectAtIndex:0 withObject:@"0"];//{(0,2,3,4,5,6)}
// 用指定集合的内容替换指定索引集位置的对象
[mulOrderSet replaceObjectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 2)] withObjects:[NSArray arrayWithObjects:@"1",@"2", nil]];//{(1,2,3,4,5,6)}
NSString *values[2];
values[0] = @"2";
values[1] = @"3";
// 用指定C数组中指定数量的对象替换集合中的对象
[mulOrderSet replaceObjectsInRange:NSMakeRange(0, 2) withObjects:values count:2];//{2,3,4,5,6}
// 在指定的索引处追加或替换对象
[mulOrderSet setObject:@"1" atIndex:0];//{(1,3,4,5,6)}
// 将指定索引处的对象移动到新位置
[mulOrderSet moveObjectsAtIndexes:[NSIndexSet indexSetWithIndex:0] toIndex:1];//{(3,1,4,5,6)}
// 将指定索引处的对象与另一个索引处的对象进行交换
[mulOrderSet exchangeObjectAtIndex:0 withObjectAtIndex:1];//{(1,3,4,5,6)}
集合重组
NSMutableOrderedSet *mulOrderSet = [NSMutableOrderedSet orderedSetWithObjects:@"1",@"2",@"3",@"4",@"5",@"6", nil];//{(1,2,3,4,5,6)}
NSMutableOrderedSet *mulOrderSet1 = [NSMutableOrderedSet orderedSetWithObjects:@"1",@"2",@"3", nil];//{(1,2,3)}
// 从接收有序集中删除不是另一个有序集的成员的对象(取交集)
[mulOrderSet intersectOrderedSet:mulOrderSet1];
// 从接收的可变有序集中移除另一个给定有序集中的每个对象(取差集)
[mulOrderSet minusOrderedSet:mulOrderSet1];
// 将另一个给定有序集中的每个对象添加到接收可变有序集(取并集)
[mulOrderSet unionOrderedSet:mulOrderSet1];
网友评论