NSOrderedSet 没有显示...订单?

Posted

技术标签:

【中文标题】NSOrderedSet 没有显示...订单?【英文标题】:NSOrderedSet not showing ... order? 【发布时间】: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 有更多信息。 【参考方案1】:

您混淆了“有序”和“排序”。数组是一个 有序 集合,这意味着它有第一个、第二个、第三个元素,直到最后一个元素。集合或字典是无序的集合,没有元素的排序。没有第一个或最后一个元素。

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

有序集合可以排序,但不会自动排序。无序集合无法排序,因为它们没有排序。

另一方面,您可能只是阅读了 NSOrderedSet 的文档,这使得这一切都非常清楚。

【讨论】:

如何“orderedSetWithSet:创建并返回包含集合内容的有序集合。”请弄清楚 sorted 和 ordered 之间的区别吗? 它说“已订购”。它没有说“排序”。如果你想“排序”,你进入 NSMutableOrderedSet 并查看排序方法。 “有序”与“无序”这个词有一个众所周知的含义,它不是“排序的”。 @gnasher729:如何在一个地方同时拥有有序查找和快速查找功能?我正在解决类似的问题。在哪里可以找到 NSOrderedSet 的实现细节??

以上是关于NSOrderedSet 没有显示...订单?的主要内容,如果未能解决你的问题,请参考以下文章

在CoreData的NSOrderedSet中的特定位置插入一个对象?

在 CoreData 中使用 NSOrderedSet 重新排序 UITableView

遍历一个 NSOrderedSet

订单退款&重复支付需求疑问点归纳整理

如何向 NSOrderedSet 添加值

面试遇到的订单表sql的解决方案