NSMutableSet输入与输出的顺序不同

时间:2013-03-28 15:46:27

标签: 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);

为什么输出的顺序与插入顺序不同?

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
)}

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

因为NSMutableSet没有订单。一个数组是有序的;一套不是。 (有序集合弥补了差距,但这不是你正在使用的。)

阅读精美的文档:

https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSSet_Class/Reference/Reference.html

第一句话是什么?

  

NSSet,NSMutableSet和NSCountedSet类将编程接口声明为无序的对象集合。

无序。故事结束。

另见我的书:

http://www.apeth.com/iOSBook/ch10.html#_nsset_and_friends

  

您可以使用for...in构造遍历(枚举)一个集合,但该顺序当然未定义。

订单未定义

(听起来你原来的问题好像你真正想要的是一个NSMutableArray,然后你随后洗牌。我有代码!但那将是一个不同的问题。)

答案 2 :(得分:1)

不维护NSMutableSet顺序。使用NSMutableOrderedSet或NSMutableArray维护顺序