Objective c 如何从包含任意对象的NSSet创建已排序的NSArray?

Objective c 如何从包含任意对象的NSSet创建已排序的NSArray?,objective-c,sorting,nsarray,nsset,Objective C,Sorting,Nsarray,Nsset,我有一个NSSet,它包含许多不同类型的对象。通常,它将包含NSDictionary、NSStrings、NSArray和类的一些组合,即objective-c“Class”类型。我需要一种方法来生成一个包含此NSSet中所有对象的NSArray,但对其进行排序,以使包含相同对象的任何集合的顺序始终相同。具体来说,我所说的“同一个对象”是指值,而不是地址。不管它是如何分类的,只要它是一致的 到目前为止,我还没有找到这样做的方法。我找不到任何方法在两个任意对象之间进行有序比较。有人对如何实现这一点

我有一个NSSet,它包含许多不同类型的对象。通常,它将包含NSDictionary、NSStrings、NSArray和类的一些组合,即objective-c“Class”类型。我需要一种方法来生成一个包含此NSSet中所有对象的NSArray,但对其进行排序,以使包含相同对象的任何集合的顺序始终相同。具体来说,我所说的“同一个对象”是指值,而不是地址。不管它是如何分类的,只要它是一致的


到目前为止,我还没有找到这样做的方法。我找不到任何方法在两个任意对象之间进行有序比较。有人对如何实现这一点有什么建议吗?

所有对象都源自
NSObject
,因此您可以简单地按
[NSObject description]
()排序,这将是对象内容的摘要


编辑:正如@Paul.s在评论中指出的那样
hash
()是一种方法(比较起来会更快)。

您可以潜在地使用对象的
hash
,然后对于任何冲突,您可能还可以按照objects类的
hash
@Paul进行排序。这是什么
hash
?您在考虑java吗?@特洛伊木马
散列
被定义为
NSObject
协议的一部分-请参阅-它被
NSDictionary
和其他人使用。@特洛伊木马在protocol@Paul.s那就这样吧。。。。他想确保他已经在任何自定义类上实现了
description
,这样就不会通过指针间接进行比较。@Tommy他在问题中没有提到自定义类,只提到标准类。我不再使用“通常”这个词了。按哈希排序可以工作,但是,如果发生哈希冲突(对于这样的异构对象,您可能会面临更高的风险),这种情况就不会稳定。根据应用程序的严重性,可以考虑找到二级排序原则(如<>代码>描述< /代码>),以帮助在这里打破联系。注意,散列仅在应用程序的单次运行期间才保证是稳定的:它们不能保证永远为相同的对象固定。如果您要在多个版本的iOS/Mac上持久化此设置,并期望这些哈希值随时间保持一致,我会很小心。