nsarray - NSOrderedSet 未显示...顺序?

标签 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 中元素的顺序是不可预测的。 但是,如果不按某种顺序或其他顺序排序[NSOrderedSetorderedSetWithSet:mySet]应该实现什么?

来自文档:

You can use ordered sets as an alternative to arrays when the order of elements is important and performance in testing whether an object is contained in the set is a consideration—testing for membership of an array is slower than testing for membership of a set.

再说一次,NSOrderedSet OrderedSetWithSet: 应该为您提供的顺序是什么?

最佳答案

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

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

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

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

关于nsarray - NSOrderedSet 未显示...顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23480625/

相关文章:

ios - NSSet 和 NSArray 的 isEqual 实现是否在内部使用 isEqualToSet 和 isEqualToArray?

ios - 你如何在 Swift 中从 NSManagedObject 获取 NSSet?

cocoa-touch - 使用 NSSortDescriptor 对 NSOrderedSet 进行排序

objective-c - 查找数组中重复次数最多的对象

ios - 如何获取另一个 NSArray 中 NSArray 的计数?

iphone - 创建 NSObject 的副本

iphone - 如何获取核心数据中的关系项目属性?

iphone - NSCountedSet - 获取集合中的项目数

ios - 核心数据、NSOrderedSet 和 iCloud