【发布时间】:2014-05-05 19:51:58
【问题描述】:
我一定是有什么奇怪的误解……
考虑:
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: 应该为您提供的顺序是什么?
【问题讨论】:
-
看看你在做什么:取一个(有序的)数组,把它变成一个(无序的)集合,然后把它变成一个有序的集合。当然,您最终不会得到与原始数组具有相同顺序的有序集合!请改用
orderedSetWithArray:。 -
1.最初的数组没有被故意排序。再次阅读sn-p。 2. 使用 WTFOrderFromWTF 调用类 WTFOrderWTF 并且 not 提供订单充其量是误导,不是吗?当您对事物进行排序 时,您会将它们排序为顺序。
orderedSetWithSet声称提供的顺序是什么? -
无论你给它什么命令。如果您调用了
orderedSetWithArray:@[@1, @9, @3],那么您将收到一个有序集合,其中包含数字 1、9 和 3 按该顺序。您似乎误解了排序和排序之间的区别。 This SO question 有更多信息。
标签: nsarray nsset nsorderedset