NSOrderedSet没有显示...订单?

时间:2014-05-05 19:51:58

标签: nsarray nsset nsorderedset

我一定有一些奇怪的误解......

考虑:

NSSet * mySet = [NSSet setWithArray:@[@1, @9, @3]] ;
NSOrderedSet * mySortedSet = [NSOrderedSet orderedSetWithSet:mySet] ;

for (NSNumber * n in mySet) {
    NSLog(@"unsorted: %@", n) ;
}
for (NSNumber * n in mySortedSet) {
    NSLog(@"--sorted: %@", n) ;
}

控制台日志:

2014-05-05 20:38:46.645 WoGa[50557:60b] unsorted: 9
2014-05-05 20:38:48.675 WoGa[50557:60b] unsorted: 1
2014-05-05 20:38:49.875 WoGa[50557:60b] unsorted: 3
2014-05-05 20:38:54.277 WoGa[50557:60b] --sorted: 9
2014-05-05 20:38:55.544 WoGa[50557:60b] --sorted: 1
2014-05-05 20:38:56.684 WoGa[50557:60b] --sorted: 3

咦?怎么'命令'?如果需要的话我可以自己排序,但是NSOrderedSet究竟是什么呢?

我可以接受mySet中元素的顺序是不可预测的。 但是[NSOrderedSet orderedSetWithSet:mySet]如果没有以某种顺序或其他进行排序应该达到什么目的?

来自文档:

  

当元素的顺序很重要时,您可以使用有序集作为数组的替代,并且在测试集合中是否包含对象时的性能是对数组成员资格的考虑测试比测试成员的成员资格要慢集。

同样,NSOrderedSet orderedSetWithSet:应该为您提供的顺序是什么?

1 个答案:

答案 0 :(得分:3)

您对“已订购”和“已排序”感到困惑。数组是有序集合,这意味着它具有第一个,第二个,第三个,最后一个元素。集合或字典是无序集合,没有元素的排序。没有第一个或最后一个元素

NSOrderedSet结合了NSSet和NSArray的属性。像数组一样,您可以在末尾添加元素或将它们插入数组中的任何位置,或者在任何地方删除元素,或者对元素进行排序。与NSSet类似,您可以查看元素是否已经存在于恒定时间内。

可以对有序集合进行排序,但不会自动对它们进行排序。无序集合无法排序,因为它们未被排序。

另一方面,您可以阅读NSOrderedSet的文档,这一切都非常清楚。