Objective c NSMutableSet intput与输出的顺序不同

Objective c NSMutableSet intput与输出的顺序不同,objective-c,nsmutableset,Objective C,Nsmutableset,我已使用以下代码将对象添加到NSMutableSet中: _theQuestionsSet = [[NSMutableSet alloc]initWithObjects:@802, @229, @522, @712, @628, @84, @412, @726, @284, @699, @1765, @1754, @1528, @2230, @2005, @1494, @1348, @2132, @2040, @2183, nil]; NSLog(@"%@", _theQuestionsSet)

我已使用以下代码将对象添加到NSMutableSet中:

_theQuestionsSet = [[NSMutableSet alloc]initWithObjects:@802, @229, @522, @712, @628, @84, @412, @726, @284, @699, @1765, @1754, @1528, @2230, @2005, @1494, @1348, @2132, @2040, @2183, nil];
NSLog(@"%@", _theQuestionsSet);
为什么输出的顺序与插入的顺序不同

2013-03-28 16:41:50.178 xxxxxxxx[4011:c07] {(
412,
1754,
628,
726,
1528,
284,
1348,
84,
2005,
699,
522,
712,
1494,
2132,
2230,
1765,
2040,
802,
2183,
229
)}

因为它没有订购。如果需要,请使用
NSMutableOrderedSet

,因为它不是有序的。如果需要,请使用NSMutableOrderedSet。

,因为NSMutableSet没有顺序。数组是有序的;一套不是。(一个有序的集合在某种程度上弥补了这一差距,但这不是你要使用的。)

阅读精细文档:

第一句是什么

NSSet、NSMutableSet和NSCountedSet类向无序的对象集合声明编程接口

无序的。故事结束了

另见我的书:

您可以在构造中遍历(枚举)带有
for…的集合,尽管顺序当然没有定义

顺序未定义


(从您最初的问题听起来,似乎您真正想要的是一个NSMutableArray,然后再进行洗牌。我有相应的代码!但这将是一个不同的问题。)

因为NSMutableSet没有顺序。数组是有序的;一套不是。(一个有序的集合在某种程度上弥补了这一差距,但这不是你要使用的。)

阅读精细文档:

第一句是什么

NSSet、NSMutableSet和NSCountedSet类向无序的对象集合声明编程接口

无序的。故事结束了

另见我的书:

您可以在
构造中遍历(枚举)带有
for…的集合,尽管顺序当然没有定义

顺序未定义


(从您最初的问题听起来,似乎您真正想要的是一个NSMutableArray,然后再进行洗牌。我有相应的代码!但这将是一个不同的问题。)

NSMutableSet顺序没有得到维护。使用NSMutableOrderedSet或NSMutableArray维护订单

不维护NSMutableSet订单。使用NSMutableOrderedSet或NSMutableArray来维护订单

他并不是说他想要订单,他说插入的顺序不是它所持有的顺序。在集合中排序的概念是没有意义的。我明白如果我以特定的顺序插入对象,除非我不使用NSMutableOrderedSet,否则它永远不会被排序。。。意思是我不需要洗牌吗?@peterk Unordered不是洗牌;如果你需要洗牌,你需要一个有序的集合,你需要自己洗牌。@B嗯,我在测试时意识到了这一点,谢谢:-)他不是说他想要它有序,他说插入的顺序不是它所持有的顺序。在集合中排序的概念是没有意义的。我明白如果我以特定的顺序插入对象,除非我不使用NSMutableOrderedSet,否则它永远不会被排序。。。意思是我不需要洗牌吗?@peterk Unordered不是洗牌;如果您需要洗牌对象,您需要一个有序的集合,您需要自己洗牌它们。@bbum我在测试时意识到了这一点,谢谢:-)刚刚订购了您的书:-)刚刚订购了您的书:-)